string.intern()显示奇怪的结果,它是如何工作的

edqdpe6u  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(420)

我知道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");
    }

输出为:
是的
有什么区别。

o0lyfsai

o0lyfsai1#

不同的是当你使用 String 在显式调用 intern ,它是隐式的。 str.intern() 不存储引用的示例 str 在字符串池中,如果 String 已经在游泳池里了。
第一个代码段:

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对象相等,则返回池中的字符串。否则,此字符串对象将添加到池中,并返回对此字符串对象的引用。。。所有文字字符串和字符串值常量表达式都是内部的。

相关问题