суббота, 1 сентября 2007 г.

Java Puzzle 32: Curse of Looper

Определите i и j таким образом, чтобы сделать следующий цикл бесконечным:
while (i <= j && j <= i && i != j)

Необычный цикл. Если i <= j и j <= i, то это верно когда i == j. А следующее выражение проверяет i != j. Выглядит, что мы в цикл никогда не попадем. Хо-хо-хо!

А давайте использовать новые возможности Java 5: unboxing! Вот ответ:
Integer i = new Integer(0);
Integer j = new Integer(0);

При вычислении первых двух выражений он используется, так как операторы сравнения <= определены только для примитивных типов. А при вычислении последнего выражения - нет, и сравниваются ссылки на два разных объекта. А они не равны. Вот тут-то мы и попали 8(

Комментариев нет:

Отправить комментарий