Подтвердить что ты не робот

Как сделать цикл бесконечным с "x <= y && x >= y && x!= Y"?

У меня был этот вопрос интервью несколько лет назад, но я еще не нашел ответа.

Каким должен быть x и y для создания бесконечного цикла?

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

}

Мы попытались использовать Nan, infinity+/-, null

float vs int.

4b9b3361

Ответ 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");
}