【发布时间】:2017-08-07 01:56:35
【问题描述】:
代码如下:
String s = new String("1");
s.intern();
String s2 = "1";
System.out.println(s == s2);
String s3 = new String("1")+new String("1");
s3.intern();
String s4 = "11";
System.out.println(s3 == s4);
上面代码的输出是:
false
true
我知道s 和s2 是不同的对象,所以结果评估为假,但第二个结果评估为真。谁能告诉我区别?
【问题讨论】:
-
您不妨参考this
-
请注意,在初始化
s4之后调用s3.intern()会将输出更改为false。这 似乎 表明文字"11"仅在执行该行时从池中检索,这不是我理解字符串文字实习工作的方式。 -
@RobbyCornelissen 这与我所做的基本相同。您只是将文字向上移动。
-
@Maybe_Factor 这根本不是答案,只是文章的链接。
-
对于那些没有足够声誉来查看已删除此问题答案的墓地的用户 - 如果您打算写一个答案,a) 概述了 Java 中字符串实习的基础知识,或者 b ) 建议
String.intern()的结果应该被分配回变量:不要打扰。真正的问题是为什么这两种情况(s == s2vss3 == s4)的行为不同。