Начиная со следующего кода...
byte foo = 1;
byte fooFoo = foo + foo;
Когда я пытаюсь скомпилировать этот код, я получаю следующую ошибку...
Ошибка: (5, 27) java: несовместимые типы: возможное преобразование с потерями из int в байт
... но если foo
является окончательным...
final byte foo = 1;
final byte fooFoo = foo + foo;
файл будет скомпилирован успешно.
Переход к следующему коду...
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
fooArray[0] = 127;
System.out.println("foo is: " + foo);
... напечатает
foo is: 1
... это нормально. Значение копируется в конечную переменную и больше не может быть изменено. Воспроизведение со значением в массиве не изменяет значение foo
(как и ожидалось...).
Для чего требуется следующее литье:
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
final byte fooFoo = foo + foo;
Как это отличается от второго примера в этом вопросе? Почему компилятор дает мне следующую ошибку?
Ошибка: (5, 27) java: несовместимые типы: возможное преобразование с потерями из int в байт
Как это может случиться?