Eclipse中断言的奇怪行为

时间:2013-03-19 16:18:07

标签: java eclipse behavior assertions

我在Java(Eclipse)中发现了一个奇怪的断言行为。简单的例子:如果我执行这个......

public static void main (String[] args) {
    assert(getA() == "a") : "Invalid";
    System.out.println("Assertion successful!");
}

private static String getA() 
{
    return "a";
}

......它会告诉我“断言成功!”正如它应该。但是如果我试试这个......

public static void main (String[] args) {
    assert(getA() + "b" == "ab") : "Invalid";
    System.out.println("Assertion successful!");
}

private static String getA() 
{
    return "a";
}

...我得到一个AssertionError。为什么这个断言没有回归呢?

注意:

2 个答案:

答案 0 :(得分:6)

你需要提供

"a".equals(getA());

第二个案例

"ab".equals("b".concat(getA()));

原因: - ==用于比较对象引用,而equals()用于字符串值比较,这是您需要的。另外,第一个场景具有相同的字符串文字“a”,因此,它返回true。但在第二种情况下,为getA()+b创建了一个新的String实例,它与文字“ab”不同。

答案 1 :(得分:5)

"a"是编译时的文字,然后"a"=="a"评估为true

getA()+"b"创建一个String的新实例,它不同于编译时文字"ab"