Хорошо, давайте посмотрим, что генерирует компилятор.
Исходный код
short[] array = new short[0];
for(int i = 0; i < array.length; i++) {}
for(byte b = 0; b < array.length; b++) {}
Байт-код
0: iconst_0 array = new short[0];
1: newarray short
3: astore_1
-------------------------------------------------------
4: iconst_0 i = 0
5: istore_2
6: goto 12
9: iinc 2, 1 i++
12: iload_2 i < array.length
13: aload_1
14: arraylength
15: if_icmplt 9
-------------------------------------------------------
18: iconst_0 b = 0
19: istore_2
20: goto 28
23: iload_2 b++
24: iconst_1
25: iadd
26: i2b
27: istore_2
28: iload_2 b < array.length
29: aload_1
30: arraylength
31: if_icmplt 23
-------------------------------------------------------
34: return
i = 0
и b = 0
генерируют точно такой же код.
i < array.length
и b < array.length
генерируют точно такой же код.
Однако код для i++
и b++
совсем другое. 1-байтная инструкция для int
, 5-байтная инструкция для byte
.
Что JIT делает с этим, неизвестно, но, если что-нибудь, использование byte
в качестве переменной итератора массива делает код медленнее.
Хотя, как уже говорили другие, вы, скорее всего, не сможете заметить разницу, особенно относительно того, что происходит внутри l oop (который на самом деле не будет пустым).
Напишите код, который имеет смысл для кода logi c.