【发布时间】:2011-10-27 06:40:27
【问题描述】:
class Test {
public static void main(String...args) {
String s1 = "Good";
s1 = s1 + "morning";
System.out.println(s1.intern());
String s2 = "Goodmorning";
if (s1 == s2) {
System.out.println("both are equal");
}
}
}
此代码在 Java 6 和 Java 7 中产生不同的输出。
在 Java 6 中,s1==s2 条件返回 false,而在 Java 7 中,s1==s2 返回 true。为什么?
为什么这个程序在 Java 6 和 Java 7 中产生不同的输出?
【问题讨论】:
-
Java 实现仅仅调用
intern()对局部字符串变量的值(并且不将返回值分配回局部变量)神奇地使变量的值比较等于文字??? -
@Mohammad Faisal 你在运行哪个 JVM?
-
@Mohammad - 这是正确的代码吗?没有错过
s1 = s1.intern()还是if (s1.intern() == s2)?只是调用intern()不应该改变s1。 -
这个问题是关于引用相等,而不是 == 与 .equals()。
-
@Faisal,卡洛斯的回答不是解释(或暗示)java 6 和 java 7 之间的行为变化吗?内森的回答提供了很好的信息。
标签: java string java-7 java-6 string-interning