Java混淆行为

Java混淆行为,java,string,null,comparison,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&q

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

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

使用括号表示正确的行为:

System.out.println(" Garbage Testing : " + (a == null) );
//=>  Garbage Testing : true
由于
+
高于
=
,因此表达式的计算结果为:

System.out.println( (" Garbage Testing : " + a) == null );
这是错误的


PS:还要注意,在您的声明中,您甚至没有打印出垃圾测试:。

使用括号表示正确的行为:

System.out.println(" Garbage Testing : " + (a == null) );
//=>  Garbage Testing : true
System.out.println(" Garbage Testing : "+ a == null );
由于
+
高于
=
,因此表达式的计算结果为:

System.out.println( (" Garbage Testing : " + a) == null );
这是错误的

PS:还要注意,在您的声明中,您甚至没有打印出
垃圾测试:

System.out.println(" Garbage Testing : "+ a == null );
它打印为false,原因是-它实际上比较了
“垃圾测试:null”==null
,结果为
false
,因为
+
具有更高的优先级

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

System.out.println(" Garbage Testing : "+ (a == null) );
打印-垃圾测试:正确

System.out.println(" Garbage Testing : "+ (a != null) );
打印-垃圾测试:错误

它打印为false,原因是-它实际上比较了
“垃圾测试:null”==null
,结果为
false
,因为
+
具有更高的优先级

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

System.out.println(" Garbage Testing : "+ (a == null) );
打印-垃圾测试:正确

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

打印-垃圾测试:false

“+”运算符优先于“==”。实际上,您正在将字符串“垃圾测试:null”与null进行比较。为了获得预期的结果,需要在“a==null”周围加括号。

“+”运算符优先于“==”。实际上,您正在将字符串“垃圾测试:null”与null进行比较。为了获得预期的结果,需要在“a==null”周围加上括号。

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

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

因为您没有封闭

a == null
括号内为

(a == null)
因此,测试条件的左侧实际上是:

" Garbage Testing : "+ a 
这绝对不是空的


如果您使用上面提到的括号进行测试,则不会出现混淆。

因为您没有将括号括起来

a == null
括号内为

(a == null)
因此,测试条件的左侧实际上是:

" Garbage Testing : "+ a 
这绝对不是空的


如果您使用上面提到的括号进行测试,则不会出现混淆。

再次。。我的团队领导比我领先:)找到了原因。。。实际上

来自阿桑巴希 原因是

[“垃圾测试:+a]

“垃圾测试:值连接起来,该值为(Null),因此最后的字符串为

[“垃圾测试:null”]

它与null的比较false

+1 Ahsan Bahi


+1 Subhrajyoti Majumder、anubhava、Juned Ahsan、Hollis Waite感谢您的努力,再次感谢。。我的团队领导比我领先:)找到了原因。。。实际上

来自阿桑巴希 原因是

[“垃圾测试:+a]

“垃圾测试:值连接起来,该值为(Null),因此最后的字符串为

[“垃圾测试:null”]

它与null的比较false

+1 Ahsan Bahi


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

谢谢,这背后的原因是什么,尽管我知道解决方案!也提供了理由。谢谢,这背后的原因是什么,尽管我知道解决办法!也提供了理由<代码>+具有高优先级<代码>+具有高优先级。