Java String.intern()显示了奇怪的结果,它是如何工作的
我知道String.intern()会在不包含对象的情况下将字符串添加到池中,但如何解释结果 代码如下:Java String.intern()显示了奇怪的结果,它是如何工作的,java,string,jvm,intern,string-constant,Java,String,Jvm,Intern,String Constant,我知道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(
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");
}
输出为:
真的
区别是什么。区别在于,当您在显式调用
intern
之前使用字符串文本“abc”时,它是隐式的intern
str.intern()
第一段:
System.out.println(str == "abc"); // "abc" is interned
str.intern(); // str is not stored in the pool
System.out.println(str == "abc"); // returns false
第二段:
str.intern(); // str is stored in the pool
System.out.println(str == "abc"); // returns true
来自实习生的Javadoc:
String java.lang.String.intern()
调用intern方法时,如果池中已经包含一个与equals(object)方法确定的string对象相等的字符串,则返回池中的字符串。否则,此字符串对象将添加到池中,并返回对此字符串对象的引用。。。
所有文本字符串和字符串值常量表达式都是插入的
此差异已用于检测池resp中是否已存在字符串。当字符串文本在运行时解析为字符串对象时。