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 が発生します。このアサーションが true を返さないのはなぜですか?

ノート:

4

2 に答える 2

6

You need to give

"a".equals(getA());

Second case

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

Reason:- == is for comparing object references, whereas equals() is used for the string value comparison, which is what you needed. Plus, the first scenario had the same string literal "a", hence, it returned true. But in the second case, a new instance of String was created for getA()+b , which is different from the literal "ab".

于 2013-03-19T16:19:01.027 に答える
5

"a"コンパイル時のリテラルであり、次のように"a"=="a"評価されますtrue

getA()+"b"コンパイル時のリテラルとは異なる String の新しいインスタンスを作成します"ab"

于 2013-03-19T16:19:53.923 に答える