几年前我有这个面试问题,但我还没有找到答案。
x 和 y 应该是什么才能形成无限循环?
while (x <= y&& x >= y && x != y) {
}
我们尝试了Nan
, infinity+/-
,null
float
与int
。
几年前我有这个面试问题,但我还没有找到答案。
x 和 y 应该是什么才能形成无限循环?
while (x <= y&& x >= y && x != y) {
}
我们尝试了Nan
, infinity+/-
,null
float
与int
。
您需要两个可比较的变量,具有相同的值,但代表不同的实例,例如:
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)。
或者更简单地说,因为Double
s 通常根本不缓存:
Double x = 0d;
Double y = 0d;
您必须创建两个整数对象,例如:
Integer x = new Integer(2);
Integer y = new Integer(2);
因为x
andy
是 Objects 而没有序数类型,所以你会得到一个无限循环。
你已经得到了答案,我只是想说我是如何得到同一个答案的。在正常情况下,这样的测试是没有用的,两个数字不可能这样工作。所以这意味着它必须是特定于 java 的。
x 和 y 可以是简单的类型 - 这使得它不可能马上。
x 和 y 可以是对象。但是哪些对象与 <= 或 >= 进行比较?只有“盒装”数字。因此,答案来得非常快。
这里是。
Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
System.out.println("Success");
}