谁能解释 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

10-06 05:35