为什么(i<=j&&j<=i&&lt;i&lt;i!=j)评估为真?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我已经编写了一段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);
        }
    }
}

在上面的代码中,同时在while循环,最初看起来该程序不会进入while循环。但实际上,它是一个无限循环,并不断打印值。

这里发生了什么?

提问于
用户回答回答于
  • i <= j被评估true的,因为自动拆箱发生了INT比较,那么这两个ij保持默认值0
  • j <= itrue由于上述原因被评估。
  • i != j被评估以true,因为两者ij是不同的对象。在比较对象时,不需要任何自动拆箱。

所有的条件都是真实的,而且你没有改变ij循环,所以它无限运行。

用户回答回答于

因为你在比较

  • 0 < = 0 (true) // unboxing
  • 0 > = 0 (true) // unboxing
  • reference != secondReference (true)当您创建对象时,而不是原始的比较。所以它评估为while(true) { // Never ending loop }...

扫码关注云+社区