我知道我们不应该将字符串与==进行比较,而是更好地使用等号 到目前为止,我知道这一切都应该是假的 那么为什么第一种方法返回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));
}
答案 0 :(得分:5)
因为文字String
的连接被编译成单个String
,它也将被插入字符串池中。这段代码:
private String ab2 = "A" + "B";
编译为
private String ab2 = "AB";
ab
和ab2
指向相同的文字字符串"AB"
,因此他们会==
。
不过,您不应相信String
与==
的比较,您应该始终使用equals
方法比较它们的相等性。
答案 1 :(得分:0)
它被称为String interning:
http://en.wikipedia.org/wiki/String_interning
总而言之,由于字符串在Java中是不可变的,因此JVM通过为两个相等的字符串文字只创建一个对象来进行优化。因此,比较返回true。