为什么数组不引用与字符串相同的对象?

Hag*_*gra 4 java arrays reference

如果在不使用"new"关键字的情况下声明它们,则对同一对象的字符串引用,如下所示:

String s1 = "Some string";
String s2 = "Some string";

System.out.println(s1 == s2); 
//prints true because 
//they reference to the same object
Run Code Online (Sandbox Code Playgroud)

但是,与我的预期相反,这与数组不起作用:

char[] anArray = {'A', 'r', 'r', 'a', 'y'};
char[] oneArray = {'A', 'r', 'r', 'a', 'y'};
System.out.println("anArray == oneArray : " + (anArray == oneArray));
//prints false
Run Code Online (Sandbox Code Playgroud)

我们没有明确提到它们是"新"数组,为什么它们不引用堆上的同一个对象呢?

Nat*_*tix 8

因为数组与字符串不同,是可变的.您通常不希望通过另一个变量引用的假定独立对象来更改从一个变量引用的对象.

char[] firstArray = {'A', 'r', 'r', 'a', 'y'};
char[] secondArray = {'A', 'r', 'r', 'a', 'y'};

firstArray[0] = 'X';
firstArray[1] = '-';

System.out.println(firstArray);
System.out.println(secondArray);
Run Code Online (Sandbox Code Playgroud)

如果数组被"实例化"(即如果相同的文字指向相同的实例),那么输出会是什么:

X-ray
X-ray
Run Code Online (Sandbox Code Playgroud)

实际发生的事情:每个文字创建一个新实例:

X-ray
Array
Run Code Online (Sandbox Code Playgroud)