Java 字符串比较取决于对象初始化

Java String comparision depending on object initialisation

以下代码:

    String a = new String("aaa");
    String a2 = new String("aaa");
    System.out.println(a == a2);

    String b = "bbb";
    String b2 = "bbb";
    System.out.println(b == b2);

产生以下输出:

false
true

为什么比较 a==a2 和 b==b2 的输出因字符串创建类型而异?

当您声明 aa2 时,您明确地创建了新的(不同的)String。使用构造函数会导致创建一个副本。因此 == 失败,因为 aa2 指向不同的值。

当您声明 bb2 时,b2 可以重新使用池中的相同字符串。因此它们实际上指向相同的值 == returns true.

查看 here or here 以获得详细答案。