0

我在 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。为什么这个断言不返回真?

笔记:

4

2 回答 2

6

你需要给

"a".equals(getA());

第二种情况

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

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

于 2013-03-19T16:19:01.027 回答
5

"a"是编译时的文字,然后"a"=="a"计算为true

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

于 2013-03-19T16:19:53.923 回答