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

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

输出是:

真的

有什么不同。

回答

不同之处在于,当您String在显式调用 之前使用文字“abc”时intern,它会被隐式插入。

str.intern()str如果一个 equalString已经在池中,则不将引用的实例存储在字符串池中。

第一个片段:

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:

字符串 java.lang.String.intern()

当调用 intern 方法时,如果池中已经包含一个等于该 String 对象的字符串(由 equals(Object) 方法确定),则返回池中的字符串。否则,此 String 对象将添加到池中,并返回对此 String 对象的引用...
所有文字字符串和字符串值常量表达式都被 interned


以上是String.intern()显示奇怪的结果,它是如何工作的的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>