Java int + =双语法惊喜

时间:2013-03-31 18:52:20

标签: java syntax operators int

我遇到了以下令人惊讶的问题:

int x = 7;
x += 0.5;

显然是合法的语法!在添加之后,x仍然是7,因此double被强制转换为int并向下舍入为0,但这在代码中没有任何显式强制转换的情况下完成。有人对此感到惊讶吗?这里的理由是什么?

编辑以澄清我的问题:任何人都可以为这个决定提供充分的理由吗?我觉得这是一个可怕的决定,要求在其他地方进行显式投射,但是在你默默丢弃数据的语言中有这一点。我错过了什么吗?

3 个答案:

答案 0 :(得分:12)

x += 0.5;

相当于:

x = (int) (x + 0.5)

一般来说:

x += y相当于x = (type of x) (x + y)


请参阅15.26.2. Compound Assignment Operators

答案 1 :(得分:0)

x += 0.5;x = (int) (x + 0.5);相同。

答案 2 :(得分:0)

这是因为 复合赋值运算符会进行隐式转换 (自动转换): 所以

x+=0.5 => x =(int)(x + 0.5) => x = (int)(7.5) => x = 7