Ale*_*sky 12 java type-conversion
这是一个奇怪的事:
float a = 0;
a = a + Math.PI; // ERROR
Run Code Online (Sandbox Code Playgroud)
但是:
a += Math.PI; // OK!
Run Code Online (Sandbox Code Playgroud)
即便如此:
int b = 0;
b += Math.PI; // OK, too!
Run Code Online (Sandbox Code Playgroud)
为什么+=运算符允许有损隐式类型转换?
ars*_*jii 16
来自JLS§15.26.2:
除了仅计算一次之外,表单的复合赋值表达式
E1 op= E2等效于E1 = (T) ((E1) op (E2)),whereT的类型.E1E1
请注意,复合赋值涉及转换.然而,简单的添加没有演员,因此错误.
如果我们包含演员表,则避免错误:
float a = 0;
a = (float) (a + Math.PI); // works
Run Code Online (Sandbox Code Playgroud)
这是一个与之x += y相同的常见误解x = x + y.
那是因为
float a = 0;
double b = 1;
a += b;
Run Code Online (Sandbox Code Playgroud)
相当于
float a = 0;
double b = 1;
a = (float)(a + b);
Run Code Online (Sandbox Code Playgroud)
a +=是相同的a = (<type of a>)(a +
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |