字符串与==的比较奇怪的效果

chi*_*rld 0 java string comparison

我知道我们不应该将字符串与==进行比较,并且最好使用等于.
到目前为止,我了解到这一切都应该是假的.
那么为什么第一种方法返回true?

private String ab = "AB";
private String ab2 = "A" + "B";
private String a = "A";
private String b = "B";
private String ab3 = a + b;

public void test () {
    System.out.println("ab == ab2" + ab==ab2);
    System.out.println("ab == ab3" + ab==ab3);
    System.out.println("ab == a+b" + ab==(a+b));
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 5

因为文字String的串联被编译成单个String,它也将被嵌入字符串池中.这段代码:

private String ab2 = "A" + "B";
Run Code Online (Sandbox Code Playgroud)

被编译为

private String ab2 = "AB";
Run Code Online (Sandbox Code Playgroud)

abab2指向相同的文字字符串"AB",因此它们是==.

不过,你不应该相信Strings的比较==,你应该总是比较它们的相等使用equals方法.