为什么代码段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);
提前致谢!
答案 0 :(得分:2)
它们都是对象,但Java重用字符串的对象才有意义。
[...] Java String Pool - JVM存储字符串的特殊内存区域。
由于Java中Strings的不变性,JVM可以进行优化 通过仅存储一个副本来为它们分配的内存量 池中的每个文字字符串。这个过程称为实习。
当我们创建一个String变量并为其赋值时,JVM 在池中搜索等值的字符串。
如果找到,Java编译器将只返回对它的引用 内存地址,不分配额外的内存。
如果没有找到,它将被添加到池(实习)及其参考 将被退回。