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