这段代码似乎可以在 Java 中运行,违反了我认为我对该语言的所有了解:
int x = 0;
x += 7.4;
x 现在的值为 7。当然,不能只写 int x = 7.4,所以这种行为对我来说似乎很奇怪且不一致。
为什么 Java 的开发者会选择这样的行为?
我的被标记为重复的问题实际上是在回答“发生了什么”部分,但不是我的主要问题:基本原理是什么。
最佳答案
数字运算符进行各种类型的转换,在本例中通过四舍五入将 7.4 double 转换为 7 int。
你这里有一个 Compound Assignment Operators
所以真正执行的是
x= (int)(x + 7.4)
因为 x 是一个 int 并且 7.4 x 被转换为 double 而不是 Binary Numeric Promotion所以你得到 7.4 作为中间结果。
然后转换结果( double ),因此受制于 Narrowing Primitive Conversion将它四舍五入为 7
关于新问题:为什么要这样做?
好吧,隐式转换是好事还是坏事,你可以争论很久。 Java 在基元、它们的盒装类型和字符串之间进行了一些转换,走了某种中间道路。
+= 运算符具有相当简单和直接的语义。如果您认为它是一个 increment by 运算符,而不是它的真实面目:运算符和赋值组合的简写,它真的只会看起来很奇怪。
关于java - int 可以增加一个 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32180302/