Java令人困惑的行为

时间:2013-09-24 05:39:55

标签: java string null comparison

我是白盒测试一些异常,我遇到了一些令人困惑的行为,发布了示例测试代码和输出!

// 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?

6 个答案:

答案 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为了你的努力,谢谢