Использование byte
или short
для переменных и констант вместо int
является преждевременной оптимизацией, которая почти не имеет никакого эффекта.
Большинство арифметических и логических инструкций JVM работают только с int
, long
, float
и double
, другие типы данных должны приводиться к (обычно) int
с в порядкедля выполнения этих инструкций над ними.
Тип числовых литералов по умолчанию: int
для целых и double
для чисел с плавающей запятой.Таким образом, использование типов byte
, short
и float
может вызвать некоторые незначительные ошибки программирования и, как правило, ухудшает читабельность кода.
Небольшой пример из книги Java Puzzlers :
public static void main(String[] args) {
for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++) {
if (b == 0x90)
System.out.print("Joy!");
}
}
Эта программа не печатает Joy!
, поскольку шестнадцатеричное значение 0x90
неявно преобразуется в int
со значением 144
.Поскольку byte
в Java подписаны (что само по себе очень неудобно), переменной b
никогда не присваивается это значение (Byte.MAX_VALUE = 127
), и, следовательно, условие никогда не выполняется.
Все вВ общем, уменьшение занимаемой памяти просто слишком мало (почти), чтобы оправдать такую микрооптимизацию.Как правило, явные числовые типы различного размера не нужны и подходят для программирования более высокого уровня.Лично я считаю, что единственным случаем, когда допустимы меньшие числовые типы, являются байтовые массивы.