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

Java字符串比较取决于对象初始化,java,string,equals,Java,String,Equals,以下代码: 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的输出会有差异?当您声明a和a

以下代码:

    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的输出会有差异?

当您声明
a
a2
时,您会显式地创建新的(不同的)
字符串。使用构造函数会导致复制。因此,
=
会失败,因为
a
a2
指向不同的值

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


查看或获取详细答案。

谢谢!两年的工作经验,我不知道functionallitz关于string:D的事,不用担心。对我来说也是这样。请随意接受答案:)