我编写了一段在无限循环中运行的Java代码.
以下是代码:
public class TestProgram {
public static void main(String[] args){
Integer i = new Integer(0);
Integer j = new Integer(0);
while(i<=j && j<=i && i!=j){
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当看到while循环中的条件时,首先看起来该程序不会进入while循环内部.但实际上它是一个无限循环并保持打印价值.
这里发生了什么?
Jun*_*san 188
i <= j被评估true的,因为自动拆箱发生了INT比较,那么这两个i和j保持默认值0.
j <= itrue由于上述原因而被评估.
i != j被评估以true,因为两者i和j是不同的对象.在比较对象时,不需要自动拆箱.
所有的条件都为真,并没有更改i,并j在循环,所以它是无限运行.
Ash*_*ani 40
因为你在比较
0 < = 0 (true) // unboxing
0 > = 0 (true) // unboxing
reference != secondReference (true)在创建对象时,不是原始比较.所以它评估为while(true) { // Never ending loop }.
Col*_*nic 17
整数对象是不同的.它与基本的int类型不同.
看到这个答案:如何正确比较Java中的两个整数?
这i != j部分是真的,你期望是假的.