1

私はいくつかの例外のホワイトボックステストを行っていましたが、いくつかの紛らわしい動作に遭遇し、サンプルのテストコードと出力を投稿しました!

// Use Case #01
String a = null;
System.out.println(" Use Case #01");
System.out.println(" Garbage Testing : "+ a == null );


//Use Case #02
a = null;
System.out.println(" Use Case #02");
System.out.println(" Garbage Testing : " + a != null );

出力

ユースケース #01

間違い

ユースケース #02

真実

a = null なのになぜ a == null は false なのですか?

4

6 に答える 6

8
System.out.println(" Garbage Testing : "+ a == null );

false を出力します"Garbage Testing : null"==nullが、その理由は、どちらの結果が優先falseされるかを実際に比較することです。+

適切なグループ化はこの問題を解決します -

System.out.println(" Garbage Testing : "+ (a == null) );

プリント - ガベージ テスト : true

System.out.println(" Garbage Testing : "+ (a != null) );

プリント - ガベージ テスト : false

于 2013-09-24T05:43:38.110 に答える
5

正しい動作のために括弧を使用します。

System.out.println(" Garbage Testing : " + (a == null) );
//=>  Garbage Testing : true

operators precedencewhere+が より大きいため==、式は次のように評価されます。

System.out.println( (" Garbage Testing : " + a) == null );

そしてそれは誤りです

PS:Garbage Testing :また、あなたの声明では印刷されないことにも注意してください。

于 2013-09-24T05:42:20.953 に答える
2

「+」演算子は「==」よりも優先されます。実際には、文字列 " Garbage Testing : null" を null と比較しています。期待どおりの結果を得るには、「a == null」を括弧で囲む必要があります。

于 2013-09-24T05:44:01.810 に答える
1

同封していないので

a == null

のように括弧内に

(a == null)

したがって、テストの条件の左側は実際には次のとおりです。

" Garbage Testing : "+ a 

これは間違いなくNULLではありません。

上記のようにブラケットを使用してテストしても混乱はありません。

于 2013-09-24T05:44:14.467 に答える
0

最初に合計を行い、次に等しいかどうかをテストします。合計の結果が null ではありません。

于 2013-09-24T05:44:04.460 に答える
0

もう一度..私のチームリーダーは、理由を理解する上で私の前にいました:)実際に

Ahsan Bahi より その理由は

[ "ガベージ テスト : "+ a ]

" Garbage Testing : "(Null)値と連結するため、最終的な文字列は次のようになります。

[ "ガベージテスト: null" ]

nullとの比較はfalse

+1 アサン・バヒ

+1 Subhrajyoti Majumder、anubhava、Juned Ahsan、Hollis Waite あなたの努力のために、ありがとう

于 2013-09-24T05:47:54.593 に答える