谁能解释 String
的这种奇怪行为?
这是我的代码:
String s2 = "hello";
String s4 = "hello"+"hello";
String s6 = "hello"+ s2;
System.out.println("hellohello" == s4);
System.out.println("hellohello" == s6);
System.out.println(s4);
System.out.println(s6);
输出是:
true
false
hellohello
hellohello
最佳答案
您需要了解 str.equals(other)
和 str == other
之间的区别。前者检查两个字符串是否具有相同的内容。后者检查它们是否是同一个对象。 "hello" + "hello"
和 "hellohello"
可以在编译时优化为同一个字符串。 "hello" + s2
将在运行时计算,因此将是一个不同于 "hellohello"
的新对象,即使其内容相同。
编辑:我刚刚注意到你的标题 - 连同 user3580294 的评论,看来你应该已经知道了。如果是这样,那么可能剩下的唯一问题是为什么一个被认为是常数而另一个不是。正如一些评论者所建议的那样,将 s2
设为 final 将改变行为,因为编译器可以相信 s2
与 "hello"
一样是常量,并且可以在编译时解析 "hello" + s2
。