我在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。为什么这个断言没有回归呢?
注意:
答案 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"