如何使用"x <= y && x> = y && x!= y"使循环无限?

bit*_*tli 23 java

几年前我有这个面试问题,但我还没有找到答案.

什么应该是x和y来进行无限循环?

while (x <= y&& x >= y && x != y) {

}
Run Code Online (Sandbox Code Playgroud)

我们试着用Nan,infinity+/-,null

floatVS int.

ass*_*ias 37

您需要两个可比较的变量,具有相同的值,但代表不同的实例,例如:

Integer x = new Integer(0);
Integer y = new Integer(0);
Run Code Online (Sandbox Code Playgroud)

x <= y并且y <= x都是正确的,因为它们Integer是未装箱的,但是实例相等性x == y是假的.

请注意,它与Float,Long并且Double也和任何值(不只是0)的作品.


您还可以使用JVM的复杂性 - 它们通常只缓存最多127个整数,所以这也可以工作:

Integer x = 128;
Integer y = 128;
Run Code Online (Sandbox Code Playgroud)

(但它不会与127).

或者更简单,因为Doubles通常根本不缓存:

Double x = 0d;
Double y = 0d;
Run Code Online (Sandbox Code Playgroud)

  • ...与`<=`和`> =`,...相比,它们只是原始包装器(不包括布尔值). (3认同)

Obl*_*obl 5

你必须创建两个整数对象,例如:

Integer x = new Integer(2);
Integer y = new Integer(2);
Run Code Online (Sandbox Code Playgroud)

因为x并且y是对象而没有序数类型,所以会得到无限循环.