我有一个小问题
我创建了这个: 字符串 abc="abc"; 字符串 xyz=abc;
if (xyz==abc){
System.out.println("true");
}
输出正如预期的那样是“true”,因为字符串、对象都指向相同的内存位置,对吗? 但是,如果我有这个:
String abc="abc";
String xyz=abc;
abc = "acvb";
System.out.println(abc + " " + xyz);
if (xyz==abc){
System.out.println("true");
}
输出为“false”(它没有出现)。这是否意味着更改字符串的值会创建一个新的内存位置并指向它,即已更改的字符串(与数组不同)? 谢谢
最佳答案
也许有些图片会更清楚,尽管我依靠 ASCII 艺术来制作图片可能会在某种程度上降低清晰度......
任何时候你有一个对象,该对象的变量(或参数)实际上保存的是该对象的“引用”或“指针”,而不是该对象的值。 String
是 Java 中的一个对象,但这个答案实际上适用于任何类型的对象。我有时会这样解释:将一个对象想象成一栋房子,而引用就是一张写有房子地址的纸。如果您复制引用文献,您将创建一张新纸,但上面写有相同的地址。所以仍然只有一所房子。
所以这是每行代码之后的情况:
String abc="abc";
variable abc
|
|
v
---------------
| abc | (String object.)
---------------
现在:
String xyz=abc;
您正在复制引用,因此现在有两个变量指向同一个对象:
variable abc variable xyz
| |
| +---------+
v v
---------------
| abc | (String object.)
---------------
这两个变量指向同一个对象,但是它们仍然是两个独立的变量。因此,如果更改变量 abc
,它对 xyz
没有影响,它仍然是对同一对象的引用。也就是说,在此之后:
abc = "acvb";
variable xyz variable abc
| |
+---------+ |
v v
--------------- ----------------
| abc | | acvb |
--------------- ----------------
现在,abc==xyz
为 false,因为它们没有指向同一个对象。
关于java - 在字符串中使用 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34539140/