Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.intern()显示了奇怪的结果,它是如何工作的_Java_String_Jvm_Intern_String Constant - Fatal编程技术网

Java 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(

我知道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");
    }
输出为:

真的


区别是什么。

区别在于,当您在显式调用
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中是否已存在字符串。当字符串文本在运行时解析为字符串对象时。