字符串与数组的双重等于(Java)

时间:2018-01-25 22:45:03

标签: java arrays string object equals

为什么代码段1评估为真,而代码段2打印错误,同时考虑字符串和数组是对象

String s1 = "abc";
String s2 = "abc";
System.out.println (s1 == s2);

代码段2:

int [] arr = {0,1,2};
int [] arr2 = {0,1,2};
System.out.println (arr == arr2);

提前致谢!

1 个答案:

答案 0 :(得分:2)

它们都是对象,但Java重用字符串的对象才有意义。

  

[...] Java String Pool - JVM存储字符串的特殊内存区域。

     

由于Java中Strings的不变性,JVM可以进行优化   通过仅存储一个副本来为它们分配的内存量   池中的每个文字字符串。这个过程称为实习。

     

当我们创建一个String变量并为其赋值时,JVM   在池中搜索等值的字符串。

     

如果找到,Java编译器将只返回对它的引用   内存地址,不分配额外的内存。

     

如果没有找到,它将被添加到池(实习)及其参考   将被退回。

Source