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

时间:2014-03-07 14:46:39

标签: 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));
}

2 个答案:

答案 0 :(得分:5)

因为文字String的连接被编译成单个String,它也将被插入字符串池中。这段代码:

private String ab2 = "A" + "B";

编译为

private String ab2 = "AB";

abab2指向相同的文字字符串"AB",因此他们会==

不过,您不应相信String==的比较,您应该始终使用equals方法比较它们的相等性。

答案 1 :(得分:0)

它被称为String interning:

http://en.wikipedia.org/wiki/String_interning

总而言之,由于字符串在Java中是不可变的,因此JVM通过为两个相等的字符串文字只创建一个对象来进行优化。因此,比较返回true。