Konwersja z byte
na char
jest rozszerzającą i zwężającą się konwersją pierwotną, zgodnie z opisem w paragraph 5.1.4 specyfikacji języka Java.
Jak opisuje to JLS, odbywa się to poprzez etap pośredni; byte
jest konwertowany na int
poprzez rozszerzającą się prymitywną konwersję, a następnie int
jest konwertowany na char
poprzez zwężającą się prymitywną konwersję (patrz 5.1.3).
Paragraph 5.2 wyjaśnia gdy obsada jest konieczna, kiedy wykonujesz zadanie:
... jeśli wyrażenie jest stałym wyrażeniem (§15.28) typu byte
, short
, char
lub int
:
- Można zastosować zwężającą się konwersję pierwotną, jeśli typ zmiennej to
byte
, short
, lub char
, a wartość wyrażenia stałego jest reprezentowalna w typie zmiennej.
zmiennej b1
rzeczywiście jest stała, ale zmienna b2
nie jest, więc ta reguła dotyczy b1
ale nie dla b2
.
Więc: można przypisać do c
b1
b1
ponieważ jest stała i wartość stałą, 1
, mieści się w char
, ale nie można przypisać b2
do c
bez obsady, ponieważ b2
nie jest stała.
Generalnie rzutowanie z bajtów na znaki i na odwrót nie jest dobrą praktyką, ponieważ ignoruje kodowanie. – Necreaux