如何使用“x = y && x!= y”使循环无限?

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

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

while (x = y && x != y) { } 

我们尝试使用Naninfinity+/-null

float vs int

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

 Integer x = new Integer(0); Integer y = new Integer(0); 

x <= yy <= x都为真,因为Integer是未装箱的,但实例等式x == y为假。

请注意,它也适用于FloatLongDouble ,并且任何值(不仅仅是0)都有效。


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

 Integer x = 128; Integer y = 128; 

(但它不会与127)。

或者更简单,因为Double s通常根本没有缓存:

 Double x = 0d; Double y = 0d; 

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

 Integer x = new Integer(2); Integer y = new Integer(2); 

因为xy是对象而没有序数类型,所以会得到无限循环。

你得到了答案,我只想说我是如何达到同一个答案的。 在正常的世界中,这样的测试将毫无用处,因此两个数字无法像这样工作。 所以这意味着它必须是一些特定的java。

x和y可以是简单的类型 – 这使得它立即变得不可能。

x和y可以是对象。 但是哪些对象与<=或> =?进行比较? 只有’盒装’号码。 因此答案非常快。

这里是。

 Integer x =1; Integer y = new Integer(1); while(x <= y&& x >= y && x != y) { System.out.println("Success"); }