int 可以增加一个 double 值

Int can be incremented by a double value

此代码似乎在 Java 中有效,违反了我自认为对该语言的了解:

int x = 0;
x += 7.4;

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

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

我的被标记为重复的问题实际上是在回答 "what happens" 部分,但不是我的主要问题:理由是什么。

前一段时间我才读到它 实际上会 X= (int)(x + 7.4)

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

你这里有一个 Compound Assignment Operators

所以真正执行的是

x= (int)(x + 7.4)

因为 x 是一个 int 并且 7.4 x 被转换为 double 而不是 Binary Numeric Promotion 所以你得到 7.4 作为中间结果。

然后将结果(双精度)转换为 Narrowing Primitive Conversion,将其四舍五入为 7

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

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

+= 运算符具有相当简单直接的语义。如果你认为它是一个 increment by 运算符,而不是它真正的样子:一个 shorthand 运算符和赋值的组合,它真的看起来很奇怪。

没有。这并不矛盾。它舍入到最近的模式。

https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

A widening conversion of an int or a long value to float, or of a long value to double, may result in loss of precision - that is, the result may lose some of the least significant bits of the value. In this case, the resulting floating-point value will be a correctly rounded version of the integer value, using IEEE 754 round-to-nearest mode (§4.2.4).

在我看来 x = 7 由于基本转换