Java неявное преобразование int в байт

Я собираюсь начать работать над чем-то, что требует чтения байтов и создания строк. Читаемые байты представляют строки UTF-16. Так что просто для проверки я хотел преобразовать простой байтовый массив в кодировке UTF-16 в строку. Первые 2 байта в массиве должны представлять порядковый номер и должны быть 0xff 0xfe или 0xfe 0xff. Поэтому я попытался создать свой байтовый массив следующим образом:

byte[] bytes = new byte[] {0xff, 0xfe, 0x52, 0x00, 0x6F, 0x00};

Но я получил ошибку, потому что 0xFF и 0xFE слишком велики, чтобы вписаться в байт (потому что байты подписаны в Java). Точнее, ошибка заключалась в том, что int нельзя преобразовать в байт. Я знаю, что мог бы просто явно преобразовать int в байт с помощью приведения и достичь желаемого результата, но это не то, о чем мой вопрос.

Просто чтобы попробовать что-то, я создал String и вызвал getBytes («UTF-16»), а затем напечатал каждый из байтов в массиве. Вывод был немного запутанным, потому что первые два байта были 0xFFFFFFFE 0xFFFFFFFF, а затем 0x00 0x52 0x00 0x6F. (Obvisouly здесь порядок байтов отличается от того, что я пытался создать выше, но это не важно).

Используя этот вывод, я решил попытаться создать свой байтовый массив таким же образом:

byte[] bytes = new byte[] {0xffffffff, 0xfffffffe, 0x52, 0x00, 0x6F, 0x00};

И как ни странно, все работало нормально. Поэтому мой вопрос: почему Java допускает автоматическое преобразование целого значения 0xFFFFFF80 в байт без явного преобразования, но для любого значения, равного или превышающего 0x80, требуется явное приведение?

Ответы на вопрос(5)

Ваш ответ на вопрос