La conversione da byte
a char
è una conversione primitiva di allargamento e restringimento, come descritto in paragraph 5.1.4 della specifica del linguaggio Java.
Come descritto da JLS, ciò avviene tramite una fase intermedia; il byte
viene convertito in int
tramite una conversione primitiva allargata e quindi lo int
viene convertito in char
tramite una conversione primitiva restrittiva (vedere 5.1.3).
Paragraph 5.2 spiega quando un cast è necessaria quando si esegue un incarico:
... se l'espressione è una costante espressione (§15.28) di tipo byte
, short
, char
, o int
:
- Una conversione primitiva restrittiva può essere utilizzata se il tipo della variabile è
byte
, short
, oppure char
e il valore dell'espressione costante è rappresentabile nel tipo della variabile.
La variabile b1
è davvero una costante, ma la variabile b2
non è, quindi questa regola vale per b1
ma non per b2
.
Quindi: è possibile assegnare b1
-c
perché b1
è una costante e il valore della costante, 1
, si inserisce in un char
, ma non è possibile assegnare ad b2
c
senza un cast perché b2
non è una costante.
In generale, la trasmissione da byte a caratteri e viceversa non è una buona pratica poiché questo ignora la codifica. – Necreaux