вторник, 6 марта 2007 г.

Java Puzzle 24: A Big Delight in Every Byte

for (byte b = Byte.MIN_VALUE; byte < Byte.MAX_VALUE; b++)
if (b == 0x99) System.out.println("Found!");

Byte имеет значения от -128 до +127, а 0x90 = +144. Таким образом, в цикле напечатано ничего не будет. Проблема в том, что при сравнении типов byte преобразуется в int. Решить эту проблему можно так:
(b == (byte)0x99)
или вот так:
((b & 0xFF) == 0x99)
Авторы рекомендуют вынести все "магические" числа в константы:
private static final byte TARGET = 0x99;
Только тут вы сразу увидите, что такой код не скомпилируется. Придется явно указывать приведение типа:
private static final byte TARGET = (byte)0x99;

Авторы напоминают совет избегать вычислений с аргументами разных типов. И для достижения этй цели они рекомендуют определять константы вместо "магических" чисел.

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

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