微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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','c'};
        String str = new String(abc);
        str.intern();
        System.out.println(str == "abc");
    }

输出为:

真实

有什么不同。

解决方法

不同之处在于,当您在显式调用 String 之前使用 intern 字面量“abc”时,它是隐式的。

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 方法时,如果池中已经包含了一个等于这个 String 对象的字符串,由 equals(Object) 方法确定,则返回池中的字符串。否则,将此 String 对象添加到池中并返回对此 String 对象的引用... 所有文字字符串和字符串值常量表达式被内嵌

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。