1 ==(int)0.5 * 2 => false,1 ==((int)0.5 * 2)=>是的,为什么?

时间:2014-12-04 10:40:51

标签: groovy

见标题。 1==(int)0.5*2计算结果为false,但1==((int)0.5*2)计算结果为true。但是(1==(int)0.5)*2会出错,因此第一个表达式不会被解析为此。不知何故,1==((int)0.5*2)中的额外括号正在改变演员和乘法的优先级。

到底究竟是什么原因造成的?这应该发生还是解析错误?

1 个答案:

答案 0 :(得分:1)

这就是表达式的样子:

1 == 0.5*2 as int //--> true
1 == (int)(0.5*2) //--> true

这一个:

1==(int)0.5*2 

false作为(int)0.5 == 0

而且这一个:(1==(int)0.5)*2完全没有意义,因为你试图将false(参见前面的例子)乘以2,这是不允许的