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 由于基本转换
此代码似乎在 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 由于基本转换