【发布时间】:2022-01-02 19:56:26
【问题描述】:
String s1 = new StringBuilder("dsada").append("dfgdfgd").toString();
String s3 = new StringBuilder("aaaa").toString();
System.out.println(s1.intern() == s1); //true
System.out.println(s3.intern() == s3); //false
s1 和 s3 最终调用 StringBuilder.toString, toString()方法委托一个新的String(),然后调用String.intern(),结果不一样,让我很困惑。
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
【问题讨论】:
-
"aaaa"是您代码中的字符串文字,因此它已经在实习池中。"dsadadfgdfgd"不是您代码中的字符串文字,因此当您调用intern()时它会添加到实习池中。
标签: java string stringbuilder