int a = 1L;
Run Code Online (Sandbox Code Playgroud)
这不编译(当然). 不兼容的类型:从long到int的可能有损转换
int b = 0;
b += Long.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)
这确实编译了!
但为什么允许这样做呢?
Sur*_*tta 10
当你这样做时+=,复合语句和编译器在内部强制转换它.在第一种情况下,编译器直接向你喊叫,因为它是直接声明:)
这条线
b += Long.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)
编译器版本相当于
b += (int)Long.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)
当然,从long转换为int会有损耗转换.
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2
形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |