2016-04-18 8 views
0

Das überraschte mich verkohlen:Java - möglich verlustbehaftete Umwandlung von Byte

char c = 'M'; 
byte b = -1; 
c = b; //incompatible types 

Warum ist dies eine möglicherweise verlustbehaftete Umwandlung? Ein Byte ist 8 Bits und die Größe eines Zeichens in Java ist immer 16 Bits, also würde ich erwarten, dass dies eine Werbung ist.

+0

[This] (https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/types.html) hat eine Tabelle mit allen primitiven Typen. (Und ihre JNI-Mappings) –

Antwort

0

char ist unsigned (hat einen Bereich von 0 bis 2^16 - 1), also -1 ist nicht in seinem Bereich.

byte, auf der anderen Seite wird unterzeichnet und hat eine Reichweite von -128 bis 127. Deshalb, auch wenn ab byte um die Hälfte der Bits eines char dargestellt wird, nicht alle möglichen byte Werte sind auch char Werte . BTW

ist char der einzige Typ ohne Vorzeichen ist Java, so dass für andere integrale Typen (int, long) diese Zuordnung funktionieren würde.

+0

Natürlich, danke! – Brikowski

+0

Es wird davon abgeraten, doppelte Fragen zu beantworten, wie in den FAQ http://meta.stackexchange.com/questions/10841/how-should-duplicate-questions-be- behandelt. Man sollte nach passenden Duplikaten suchen und stattdessen abstimmen. – Tunaki

+0

Man versuchte, mehrere Anweisungen wie "Konvertierung von Byte nach Char in Java" zu googlen und nichts zu finden. Nicht so aggressiv über doppelte Threads zu sein spart Menschen Zeit imho. – Brikowski