char
- единственный тип unsigned в Java, поэтому его диапазон значений не полностью содержит диапазон значений другого типа Java.
Вы должны использовать явный оператор литья для любого где диапазон целевого типа не полностью охватывает диапазон источника.
Я взял это из спецификации языка:
«Во-первых, байт преобразуется в int посредством расширения примитивного преобразования (п. 5.1.2), а затем полученный int преобразуется в char, сужая примитивное преобразование (§5.1.3). "