问题
我编写了一段在无限循环中运行的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);
}
}
}
在上面的代码中,当看到2772334760loop中的条件时,首先看起来该程序不会进入while
loop。但实际上它是一个无限循环并保持打印价值。
这里发生了什么?
#1 热门回答(188 赞)
- i <= j被评估为true,因为对于int比较会发生自动拆箱,然后i和j都保持默认值0。
- 由于上述原因,j <= i被评估为真。
- i!= j被评估为真,因为i和j都是不同的对象。在比较对象时,不需要自动拆箱。
所有条件都是正确的,并且你没有在循环中更改i
和331106801,因此它无限运行。
#2 热门回答(40 赞)
因为你在比较
- 0 <= 0(真)//取消装箱
- 0> = 0(true)//取消装箱
- reference!= secondReference(true),因为你正在创建对象,而不是原始比较。所以它评估为while(true){//永不结束循环}。
#3 热门回答(17 赞)
整数对象是不同的。它与基本的int类型不同。
看到这个答案:How to properly compare two Integers in Java?
Thei != j
part是真的,你期望它是假的。