我是白盒测试一些异常,我遇到了一些令人困惑的行为,发布了示例测试代码和输出!
// 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 false虽然a = null?
答案 0 :(得分:8)
System.out.println(" Garbage Testing : "+ a == null );
它打印错误,原因是 - 它实际比较"Garbage Testing : null"==null
哪个结果为false
,因为+
具有更高的优先级。
正确的分组可以解决这个问题 -
System.out.println(" Garbage Testing : "+ (a == null) );
打印 - 垃圾测试:是真的
System.out.println(" Garbage Testing : "+ (a != null) );
打印 - 垃圾测试:错误
答案 1 :(得分:5)
使用括号表示正确行为:
System.out.println(" Garbage Testing : " + (a == null) );
//=> Garbage Testing : true
由于operators precedence
+
高于==
,因此您的表达式评估为:
System.out.println( (" Garbage Testing : " + a) == null );
,这是假的
PS:另请注意,在您的对帐单中,您甚至无法打印Garbage Testing :
。
答案 2 :(得分:2)
'+'运算符优先于'=='。实际上,您将字符串“Garbage Testing:null”与null进行比较。为了达到您期望的结果,您需要在“a == null”周围放置括号。
答案 3 :(得分:1)
由于你没有附上
a == null
括号中的
(a == null)
所以测试条件的左侧实际上是:
" Garbage Testing : "+ a
绝对不是空的。
如果使用上述括号进行测试,则不会产生混淆。
答案 4 :(得分:0)
首先求和,然后测试相等性。 sum的结果不为空。
答案 5 :(得分:0)
再一次......我的团队领导是我的前进:)我得到了理由......实际上
来自Ahsan Bahi 原因是
[“垃圾测试:”+ a]
将“垃圾测试:”与 a 值联系起来(Null),以便最终字符串为
[“垃圾测试:null”]
及其与null 的比较为 false
+1 Ahsan Bahi
+1 Subhrajyoti Majumder,anubhava,Juned Ahsan,Hollis Waite为了你的努力,谢谢