Kev*_*vin 2 java types jvm casting type-conversion
请考虑以下代码:
System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);
Run Code Online (Sandbox Code Playgroud)
第一行打印预期值,4294967296.但第二行打印出一个0.我检查了两个表达式的类型(通过将它们传递给方法),并且两者都被longJVM 识别.Lava 7语言规范指出,对于二进制操作,"如果任一操作数的类型为long,则另一个操作数转换为long".这似乎正在发生,但我有两个问题:
如果两个操作数最终都是long,为什么第一个表达式中的高阶位被切断?
为什么订单很重要?
0xFFFFFFFF等于-1.当你添加1 + -1你得到0.
订单很重要,因为 0xFFFFFFFFL != (long) 0xFFFFFFFF
就像 (double) 0.1F != 0.1
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |