在 java 中,如果你有两个内容相同的数组,但它们是分开构造的,array1 == array2
将为 false,因为 equals 进行引用检查并且它们的引用不同。但能保证他们总是有不同的引用资料吗?例如
public class TestArrayReferences {
private static final String[] SENTINEL_ARRAY_1 = new String[0];
private static final String[] SENTINEL_ARRAY_2 = new String[0];
public static boolean testArrays() {
return SENTINEL_ARRAY_1 == SENTINEL_ARRAY_2;
}
}
如果我调用 testArrays,返回的是 false,但它能保证始终为 false 吗?即,是否允许 JVM 检测到 SENTINEL_ARRAY_1 和 SENTINEL_ARRAY_2 始终相同并因此让它们引用相同的数组?
最佳答案
假设它们都是通过分配新数组创建的,而不是通过赋值创建的,不,它们不能引用相同。
数组不像字符串那样是驻留的,因此创建一个新数组会在内存中创建一个新项。这就是为什么您可以创建多个相同长度的新 int 数组,并将项目添加到一个数组而不将它们也添加到另一个。
编辑:还要注意字符串是不可变的,这就是为什么它们可以被保留而不会遇到问题的原因。如果字符串是可变的,则实习将不起作用:
String s1 = "Hello";
String s2 = "Hello";
s1.setchar(0, 'J'); // fictional method to change one char of a String
如果此方法存在,并且字符串被驻留,则 s2 也将设置为“Jello”,除非进行了某种解除驻留。
关于java - 可以分开但相同的数组通过引用永远相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318693/