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 却是假的?

4

6 回答 6

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

它打印错误,原因是- 它实际上比较"Garbage Testing : null"==null了哪个结果具有更高的优先级。false+

适当的分组可以解决这个问题 -

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

打印 - 垃圾测试 : true

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

打印 - 垃圾测试:错误

于 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 

这绝对不是空的。

如果您使用上述括号进行测试,则不会造成混淆。

于 2013-09-24T05:44:14.467 回答
0

它首先进行求和,然后测试是否相等。sum 的结果不为空。

于 2013-09-24T05:44:04.460 回答
0

再一次..我的团队负责人领先:)我得到了原因......实际上

来自 Ahsan Bahi 原因是

[“垃圾测试:”+一个]

将"Garbage Testing :"(Null)值连接起来因此最终字符串为

[“垃圾测试:空”]

并且它与 null 的比较错误的

+1 阿赫桑巴希

+1 Subhrajyoti Majumder、anubhava、Juned Ahsan、Hollis Waite 感谢您的努力,谢谢

于 2013-09-24T05:47:54.593 回答