Я сейчас использую Eclipse. Следует отметить две вещи:
- Компилятор проверяет границы во время инициализации.
- Компилятор вычисляет значения константных выражений, таких как
3 * (2 + 1)
.
Это работает:
byte b = 127; // works, range of a byte is [-128, 127]
Но это не так:
byte b = 128; // does not work, outside of range
Это работает:
byte b = 100 + -228; // works, 100 + -228 = -128
Но это не так:
byte b = 1;
byte c = b + 1; // does not work, why not?
И это тоже не так:
byte b = 1;
byte c = b + (byte) 1; // does not work, why not?
Обратите внимание, что b
является переменным выражением. Если используется переменное выражение, результат оператора +
будет по крайней мере равным int . Следовательно, вы не можете присвоить его c
. В отличие от константных выражений, компилятор не вычисляет переменные выражения.
Компилятор также будет жаловаться на short
и char
- попробуйте сами.
И, наконец, использование final
для переменной эффективно превращает ее в константное выражение, поэтому это будет работать:
final byte b = 1;
byte c = b + 1; // works