gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:01 25 4
gpt4 key购买 nike

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

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

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

但是,与我预期的相反,对数组执行此操作不起作用:

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

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

最佳答案

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

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);

如果数组被“驻留”(即,如果相同的文字指向相同的实例),输出会是什么:

X-ray
X-ray

实际发生了什么:每个文字创建一个新实例:

X-ray
Array

关于java - 为什么数组不引用与字符串相同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33733264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com