Как сделать цикл бесконечным с "x <= y && x >= y && x!= Y"?
У меня был этот вопрос интервью несколько лет назад, но я еще не нашел ответа.
Каким должен быть x и y для создания бесконечного цикла?
while (x <= y&& x >= y && x != y) {
}
Мы попытались использовать Nan
, infinity+/-
, null
float
vs int
.
Ответы
Ответ 1
Вам нужны две переменные, которые сопоставимы, имеют одно и то же значение, но представляют разные экземпляры, например:
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
вообще не кэшируются:
Double x = 0d;
Double y = 0d;
Ответ 2
вам нужно создать два объекта Integer, например:
Integer x = new Integer(2);
Integer y = new Integer(2);
Поскольку x
и y
являются объектами и не имеют порядковых типов, вы получаете бесконечный цикл.
Ответ 3
У тебя есть ответ, я просто хотел сказать, как я попал к тому же самому.
В нормальном мире такой тест был бы бесполезным, нет возможности, чтобы два числа работали так. Таким образом, это означает, что он должен быть специфичным для Java.
x и y могут быть либо простыми типами, что делает невозможным сразу.
x и y могут быть объектами. Но какие объекты сравниваются с <= или > =? Только "в штуках".
Таким образом, ответ приходит очень быстро.
Ответ 4
Вот он.
Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
System.out.println("Success");
}