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?
答案 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。