Int 可以增加一个双精度值

Brr*_*rch 5 java floating-point double int casting

这段代码似乎在 Java 中工作,违反了我认为我对语言的了解:

int x = 0;
x += 7.4;
Run Code Online (Sandbox Code Playgroud)

x 现在的值为 7。当然,不能只写int x = 7.4,所以这种行为对我来说似乎很奇怪且不一致。

为什么Java的开发者会选择这样的行为?

我被标记为重复的问题实际上是在回答“发生了什么”部分,但不是我的主要问题:基本原理是什么。

Jen*_*der 4

数字运算符执行各种类型的转换,在本例中通过四舍五入将 7.4 double 转换为 7 int。

这里有一个复合赋值运算符

所以真正被执行的是

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

由于 x 是 int 并且 7.4 x 会转换为 double 与二进制数字提升,因此您会得到 7.4 作为中间结果。

然后对结果(双精度)进行强制转换,并因此进行窄化原始转换,将其四舍五入为 7

关于新问题:为什么要这样做?

好吧,你可以争论隐式转换是好事还是坏事。Java 走了某种中间道路,在基元、盒装类型和字符串之间进行了一些转换。

+= 运算符具有相当简单且直接的语义。如果您认为它是按运算符递增,而不是它真正的含义:运算符和赋值组合的简写,那么它确实看起来很奇怪。