23

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

x 和 y 应该是什么才能形成无限循环?

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

}

我们尝试了Nan, infinity+/-,null

floatint

4

4 回答 4

37

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

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

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

请注意,它也适用于Float,Long并且Double任何值(不仅仅是 0)都适用。


您还可以使用 JVM 的复杂性——它们通常只缓存高达 127 的整数,所以这也可以:

Integer x = 128;
Integer y = 128;

(但它不会与 127)。

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

Double x = 0d;
Double y = 0d;
于 2013-04-12T11:52:50.383 回答
5

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

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

因为xandy是 Objects 而没有序数类型,所以你会得到一个无限循环。

于 2013-04-12T11:53:58.460 回答
2

你已经得到了答案,我只是想说我是如何得到同一个答案的。在正常情况下,这样的测试是没有用的,两个数字不可能这样工作。所以这意味着它必须是特定于 java 的。

x 和 y 可以是简单的类型 - 这使得它不可能马上。

x 和 y 可以是对象。但是哪些对象与 <= 或 >= 进行比较?只有“盒装”数字。因此,答案来得非常快。

于 2013-04-12T12:10:05.580 回答
0

这里是。

Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
    System.out.println("Success");
}
于 2013-04-12T11:55:32.673 回答