以下代码在使用JDK 8和JDK 9运行时会产生不同的结果。
在JDK 8(版本1.8.0_172)以下,该代码会输出:
public static void main(String[] args) {
String s = new String("1");
s.intern();
String s2 = "1";
System.out.println(s == s2);
String s3 = new String("1") + new String("1");
//String s3 = "1" + "1";
s3.intern();
String s4 = "11";
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
}
在JDK 8(版本1.8.0_172)以下,该代码会输出:
false
true
true
但是使用JDK 9(版本9.0.1)时,代码返回:
false
false
true
我已经检查了两个JDK版本,它们都是正确的。为什么代码会产生不同的结果?我的程序有什么问题吗?
s3.intern()
时,你实际上是指s3 = s3.intern()
吗? - Joe Cintern()
或new String(String)
。虽然在学术上很有趣,但对于大多数使用Java的方式来说没有实际用途。 - Mark Rotteveel