【问题标题】:Reference equality for String literals字符串文字的引用相等
【发布时间】:2014-12-14 13:27:56
【问题描述】:

我有以下代码 sn-p。对于字符串 s1s2 的引用相等,我得到的输出为 false

这不应该是true吗?字符串在 Java 中是不可变的,当我创建具有与 s1 相同内容的 s2(我讨厌 Winters)时,引用 s2 将简单地指向由 s1 指向的现有字符串对象。

public static void main(String[] args) {

    String s1="I hate"; 
    s1=s1+" Winters"; 

    String s2="I hate Winters";

    System.out.println(s1==s2);
}

【问题讨论】:

    标签: java string reference string-literals


    【解决方案1】:

    在您的程序中,计算是在运行时进行的,编译器不知道s1s2 将是相等的字符串,因此它不会成为常量池的一部分。如果你这样做:

    String s1 = "I hate Winters"; 
    String s2 = "I hate" + " Winters"; 
    

    连接将在编译时发生,它们将指向池中的相同文字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多