Warum ist das Casting von Short zu Char eine einschränkende Umwandlung?
Eine Verengungskonvertierung wird durchgeführt, wenn ein Datentyp, der einen größeren Wert enthalten kann, in einen Datentyp umgewandelt wird, der maximal einen kleineren Wert enthalten kann.
long l = 4L;
int i = (int)l;
Jedoch verstehe ich nicht, warum ein Kurzschluss in ein Zeichen eine einschränkende Konvertierung ist, aber ich habe die Intuition, dass es mit signierten / nicht signierten dieser beiden Datentypen zusammenhängt, aber ich kann nicht erklären, warum.
short s = 4; // short max value is 32767
char c = (char)s; // char max value is 65535
Es sieht so aus, als wäre es eine verbreiternde Umwandlung oder zumindest keine Verengung oder Verbreiterung, da beide 16 Bit groß sind und die gleiche Anzahl von Werten enthalten können.
System.out.println((int)Character.MIN_VALUE); //0
System.out.println((int)Character.MAX_VALUE); //65535
System.out.println(Short.MIN_VALUE); //-32768
System.out.println(Short.MAX_VALUE); //32767
//65535 = 32768+32767