use*_*588 0 java for-loop short
我在Java中发现了一个非常奇怪的东西,似乎是一个bug.for循环不能正确评估32767处的短值条件(最大值,请参见此处).请参阅下面的示例代码.我在这里错过了什么吗?
for (short i = 32766; i <= 32767; i++) {
System.out.println("i is now " + i);
if (i < 0) {
System.out.println("This should never be printed");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
i is now 32766
i is now 32767
Run Code Online (Sandbox Code Playgroud)
实际产量:
i is now 32766
i is now 32767
i is now -32768
This should never be printed
Run Code Online (Sandbox Code Playgroud)
每个可能的short值都是<= 32767,因为32767是一个short可以容纳的最大数字.
这意味着你的状态if永远是真实的,你的循环永远不会结束.
Short.MIN_VALUE由于溢出(不会在Java中引发异常),该值将换行.
一般说明:在Java中使用a的正当理由很少short,几乎所有的计算,循环计数等都应该用int(或long适当的)完成.short通常不会更快,它通常不会为您节省任何空间(除非您有一个数组).
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |