📜  Java中的无限循环谜题

📅  最后修改于: 2022-05-13 01:55:22.610000             🧑  作者: Mango

Java中的无限循环谜题

问题 1 :在给定的代码段中插入代码以使循环无限。

解决方案:
看起来它应该只运行两次迭代,但可以通过利用溢出行为使其无限循环。
Integer.MAX_VALUE 是 int 可以在Java中存储的最大值。当我到达 Integer.MAX_VALUE 并递增时,它会默默地环绕到 Integer.MIN_VALUE。因此,我们可以声明变量以小于最大值 1 开始。
以下是解决方案:

在此,start=2147483645 (Integer.MAX_VALUE-1),其值为 2147483645、2147483646、-2147483648、-2147483647…….. 等等。

问题 2在给定的代码段中插入代码以使循环无限。

解决方案:
在 5.0 版之前,Java 的数值运算符(=) 要求它们的两个操作数都是原始数值类型(byte、char、short、int、long、float 或 double)。在 5.0 版中,规范更改为每个操作数的类型必须可转换为原始数字类型。问题就在于此。
在 5.0 版中,语言中添加了自动装箱和自动拆箱。我们在下面使用它:

前两个子表达式(i <= j 和 j <= i)对 i 和 j 执行拆箱转换,并以数值方式比较结果 int 值。 i 和 j 都代表 0,因此这两个子表达式的计算结果都为真。第三个子表达式 (i != j) 对对象引用 i 和 j 执行身份比较。这两个变量引用不同的对象,因为每个都被初始化为一个新的 Integer 实例。因此,第三个子表达式的计算结果也为真,并且循环永远旋转。