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的开发者会选择这样的行为?
我被标记为重复的问题实际上是在回答“发生了什么”部分,但不是我的主要问题:基本原理是什么。
数字运算符执行各种类型的转换,在本例中通过四舍五入将 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 走了某种中间道路,在基元、盒装类型和字符串之间进行了一些转换。
+= 运算符具有相当简单且直接的语义。如果您认为它是按运算符递增,而不是它真正的含义:运算符和赋值组合的简写,那么它确实看起来很奇怪。
归档时间: |
|
查看次数: |
412 次 |
最近记录: |