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)
因为文字String的串联被编译成单个String,它也将被嵌入字符串池中.这段代码:
private String ab2 = "A" + "B";
Run Code Online (Sandbox Code Playgroud)
被编译为
private String ab2 = "AB";
Run Code Online (Sandbox Code Playgroud)
ab并ab2指向相同的文字字符串"AB",因此它们是==.
不过,你不应该相信Strings的比较==,你应该总是比较它们的相等使用equals方法.