java - 在字符串中使用 ==

标签 java string

我有一个小问题

我创建了这个: 字符串 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/

相关文章:

java - 导航菜单项点击不起作用

java - DialogFragment 中的 getContentResolver() 和 getWindow()

当我创建一个对象时,java 子类?

java - 使用 `==` 比较字符串

Javascript:转换代码字符串并返回

JAVA 到 Perl - 端口 XOR 加密器类

Java ArrayList 线程不安全示例说明

c - C 中的简单字符串程序 - 无法打印字符串

java - 使用beanshell运行java代码

python - 如何将字符串的各个部分提取为单独的字符串