我发现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。断言为什么不返回true?

注意:


测试时不要忘记在VM参数中添加“ -ea”参数! (Eclipse: enable assertions

最佳答案

你需要给

"a".equals(getA());


第二种情况

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


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

09-25 21:04