我对字符串中的别名和数组中的别名之间的比较感到困惑。
String a = "hello";
String b = "hello";
a == b;
>>> true
int [] a = {1,2,3};
int [] b = {1,2,3};
a == b
>>> false
我知道在字符串中,当你调用 new String 方法时,它会定向到不同的地址。否则,它将采用具有相同字符串文字的前一个地址。 然而,这对数组不起作用。有人能解释一下为什么它给出错误吗?
最佳答案
由于 String
是不可变的,Java 可以执行优化:当它检测到两个 String
都被初始化为引用相同的值时:它只需要创建该值的单个对象,并且可以让两个 String
变量引用它。
由于数组是可变的,如果尝试进行相同的优化,对 a
的更改(例如 a[1]=7
)也会导致 b
发生更改。这种行为不是人们所期望的,因此没有完成。如果您明确想要这种行为,则需要明确设置 b
来引用 a
所引用的内容(例如 int[] b = a
)。
关于java - java中字符串和数组的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569770/