java - 如果 == 比较 Java 中的引用,为什么它对这些字符串求值为真?

标签 java string reference

如前所述,== 运算符比较对象引用以检查它们是否引用堆上的同一对象。如果是这样,为什么我得到这段代码的“相等”?

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = "Str1";

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}

最佳答案

该程序将打印Equal(至少使用Sun Hotspot 和suns Javac。)这里在http://ideone.com/8UrRrk 上进行了演示。

这是因为字符串文字常量存储在字符串池中并且字符串引用可以被重用。

进一步阅读:


但是:

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = new String("Str1");

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}

将打印 Not equal 因为 new 保证引入一个新的引用。

因此,经验法则:始终使用 equals 方法比较字符串。

关于java - 如果 == 比较 Java 中的引用,为什么它对这些字符串求值为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033625/

相关文章:

java - Android Java 文本不居中

java - 如何从文件中将字符串读入字符串数组?

javascript - 压缩后的 Java String 的长度与作为 WebSocket 消息发送时的 content-length 不相等

c++ - 引用 init 两次 cpp

java - 指定 ZonedDateTime 的时区而不更改实际日期

java - java中静态变量的类级锁

Java字母排序

javascript - 将对象字符串传递给 javascript 函数

swift - 静态 boolean 值是 Swift 中的引用类型吗?

c# - 我可以访问未直接引用的库