java - int 可以增加一个 double 值

标签 java casting floating-point int double

这段代码似乎可以在 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/

相关文章:

java - 如何从 Spring Boot 中的实体访问存储库?

java - 如何实现自定义身份验证?

c++ - 强制转换的结果是右值吗?

c++ - 指向基类的指针总是 <= 指向派生类的指针吗?

c - 分析编号处理代码 : 28% of time in fegetexcept() & optimal compiler flags?

c - 为什么c变量总是输出0?

java - java中if else语句的逻辑错误

java - Android - WebView向下滚动时刷新

c++ - 将 void** 转换为 T** 的问题

java - 正则表达式拆分字符串中的 double 和整数