java - java中字符串和数组的别名

标签 java arrays

我对字符串中的别名和数组中的别名之间的比较感到困惑。

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/

相关文章:

arrays - Go中字符串 slice 的最大大小

arrays - 使用 Ruby 读取 YAML,意外的返回类型

c - 在链表结构体中传入字符串

javascript - 在普通 JavaScript 中单击共享相同类的另一个元素时如何隐藏一个元素?

Java 选择布局问题

java - 当 ArrayList 中多个对象相同时,如何找到它们的索引

java - 如何保证泛型类型的类型

javascript - Array.push 不适用于本地存储

java - Java中List的Reverse方法打印List两次

java - JProfiler 显示 "unknown"JDBC 调用花费了 40% 的时间