我知道string.intern()会在不包含对象的情况下将字符串添加到池中,但是如何解释结果。
代码如下:
public static void main(String[] args) {
char[] abc = new char[]{'a','b','c'};
String str = new String(abc);
System.out.println(str == "abc");
str.intern();
System.out.println(str == "abc");
}
输出为:
假
假
但是当代码如下:
public static void main(String[] args) {
char[] abc = new char[]{'a','b','c'};
String str = new String(abc);
str.intern();
System.out.println(str == "abc");
}
输出为:
是的
有什么区别。
1条答案
按热度按时间o0lyfsai1#
不同的是当你使用
String
在显式调用intern
,它是隐式的。str.intern()
不存储引用的示例str
在字符串池中,如果String
已经在游泳池里了。第一个代码段:
第二个代码段:
来自实习生的javadoc:
string java.lang.string.intern()
当调用intern方法时,如果池中已经包含一个字符串,该字符串与equals(object)方法确定的string对象相等,则返回池中的字符串。否则,此字符串对象将添加到池中,并返回对此字符串对象的引用。。。所有文字字符串和字符串值常量表达式都是内部的。