Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 字符串引用?_Java_String - Fatal编程技术网

Java 字符串引用?

Java 字符串引用?,java,string,Java,String,我们制作以下字符串对象 String str1 = new String("ABC"); String str2 = new String("ABC"); String str3 = "ABC"; String str4 = "ABC"; 关于上述两个问题: system.out.println(“valof str1”+str1)--它以ABC格式打印str1 但是当我们比较if(str1==str2)时,它会比较string对象的引用。怎么做 你有什么不同吗 str1与str2和str3具

我们制作以下字符串对象

String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
关于上述两个问题:

  • system.out.println(“valof str1”+str1)--它以ABC格式打印str1
    但是当我们比较
    if(str1==str2)
    时,它会比较string对象的引用。怎么做 你有什么不同吗

  • str1
    str2
    str3
    具有不同的引用,但是
    str3
    str4
    具有相同的引用,所以jvm会检查我们将使用相等运算符(而不是新运算符)创建的字符串是否已经存在(如果存在,它不会创建新对象,只需将相同的引用分配给新变量,即
    str4
    ),但在使用新运算符时,它不会进行此验证

  • 在Java中,字符串文本(裸的
    “ABC”
    而不是
    新字符串(“ABC”)
    )被插入。也就是说,JVM中只存储了一个副本,并且始终是使用的副本。这就是为什么使用
    ==
    时它们比较相等的原因

    以下比较也总是正确的:

    str1.intern() == str2.intern()
    str1.intern() == str3
    str2.intern() == str3
    str1.intern() == str4
    str2.intern() == str4
    

    当您调用
    新字符串(…)
    时,您正在显式地创建新字符串并请求不同的引用。如果您想返回到单个引用,可以调用:

    str1 = str1.intern();
    

    仅供参考,你可以调用s.intern()来实习任何字符串。@Spike:事实上,我更新了我的答案来证明这一点。(我本来打算在一开始就把它放进去,但因为我想在《西部最快的枪》中获得第一个帖子——我通常会发布一些基本的帖子,然后在5分钟的宽限期内扩展。)感谢chris给出了深刻的解释。但我对您的解释有以下疑问:-1)如果我们创建了str1=新字符串(“ABC”)//它现在还没有添加到池中。正确吗?但是,当我们执行str1.intern()时,它会将str1添加到池中。我的point1仍然没有得到响应,即当我们执行此操作时,如果(str1==str2)它比较引用,但在打印str1 inside sys out时,它实际上会打印值?@Mohit:打印时不需要插入字符串!如果你想用
    ==
    进行比较,只需要实习一下。否则,不管你是否实习一个字符串都没有区别。@berry120祝贺你对最近一个问题投了56票