我发现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”不同。