这些表达行为的原因是什么?

时间:2017-09-01 03:31:09

标签: java groovy

println (0>4​)​<5​ // prints true
println (0<4​)​<5​ // prints true
println (0>4)​>5​ // prints false
println (0<4)>5 // prints true

当我尝试提取此表达式的类时,会导致java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Boolean。为什么它会尝试将表达式从Integer转换回Boolean?

2 个答案:

答案 0 :(得分:1)

表达式(0<4)<5在Groovy和Java中都是无效语法。 (0<4)boolean(盒装时为Boolean),无法与int(盒装时为Integer)进行比较。这就是你收到错误信息的原因。

println (0<4)<5实际上已解析为println(0<4) < 5,因此它会将println(0<4)的返回值println(true)与值5进行比较。

在Groovy中,println返回null。出于某些特殊原因,这可以与任何Object进行比较。 null比较等于null且小于任何真实对象,包括Integer对象5

答案 1 :(得分:0)

在许多语言中,布尔表达式在数值表达式中使用时会自动强制转换为整数,其中True ==&gt; 1和False ==&gt; 0。所以0>4 = False = 0,0<4 = True = 1.这会将语句转换为:

println 0​<5
println 1​<5​
println 0​>5​
println 0<5​

,如您所见,会产生True,True,False,True。