为什么Java中写在infinite loop之后的代码仍然可以执行?
Java循环后语句可执行的原因解释
相关测试代码如下:
public class Main{ public static void main(String[] args){ for(int i=0; i>=0; i++){} System.out.println("Hello, World"); // This is printed on the console } }
该现象的核心原因是Java int类型的整数溢出:
- Java中
int是32位有符号整数,固定取值范围为-2147483648到2147483647,不存在无限增大的可能 - 循环中
i从0开始逐次自增,当i到达最大值2147483647后,再执行一次自增操作会触发有符号整数溢出,计算结果会回卷为int的最小值-2147483648 - 此时循环判断条件
i >= 0不再成立,循环正常终止,后续的打印语句自然会被执行
注:该循环实际会执行21亿余次,在普通设备上原生执行需要数秒到数十秒才能完成循环退出,如果运行时瞬间就得到输出,大概率是编译期JIT做了优化,直接识别到了循环的最终退出条件,跳过了实际循环执行过程。
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

