Eclipse中断言的奇怪行为

Pas*_*ber 0 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";
}
Run Code Online (Sandbox Code Playgroud)

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

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

private static String getA() 
{
    return "a";
}
Run Code Online (Sandbox Code Playgroud)

...我得到一个AssertionError.为什么这个断言不会回归真实?

注意:

Sud*_*hul 6

你需要付出代价

"a".equals(getA());
Run Code Online (Sandbox Code Playgroud)

第二种情况

"ab".equals("b".concat(getA()));
Run Code Online (Sandbox Code Playgroud)

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


Jav*_*ier 5

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

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