Java int + =双语法惊喜

Eri*_*uer 8 java syntax int operators

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

int x = 7;
x += 0.5;
Run Code Online (Sandbox Code Playgroud)

显然是合法的语法!添加后,X仍然是7,所以双被转换为int并四舍五入到0,但这是没有代码中的任何显式转换完成.有人对此感到惊讶吗?这里的理由是什么?

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

Eng*_*uad 12

x += 0.5;
Run Code Online (Sandbox Code Playgroud)

相当于:

x = (int) (x + 0.5)
Run Code Online (Sandbox Code Playgroud)

一般来说:

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


15.26.2.复合赋值运算符

  • 我想我不清楚......我明白规范说这是它的工作原理.我的问题是:为什么?怎么有人可以证明允许x + = .5,但不允许x = x + .5 ?! 这对我来说似乎很疯狂. (2认同)
  • 我认为@EricLindauer所说的应该是:`x + = 0.5`应该等同于`x =(x + 0.5)`并且不添加`(int)`的部分,因为它的结果在默默地失去精确度. (2认同)