Konvertieren von Chars zu Int-Werte in Java
System: Windows Vista 32-bit, Java 6.0.2
Habe ich ein paar Fragen über das konvertieren von chars, ints.
Ich führen Sie den code unten verlassen myInt mit einem Wert von 4:
char myChar = '4';
int myInt = myChar - '0';
Nun, ist diese Umwandlung etwas, das Java nicht automatisch? Wurde der ascii-Wert von '0' subtrahiert von ascii '4', und dann cast zu einem int-hinter den kulissen? Das ist verwirrend für mich, weil wenn ich versuche den umgekehrten Vorgang, ich haben tatsächlich gewirkt das Ergebnis als char:
int anotherInt = 5;
char newChar = anotherInt + '0'; //gives error
char newChar = (char)(anotherInt + '0'); //works fine
Ist das auftreten, da Java automatisch Gießen (anotherInt + '0') einen int-Wert, wie im ersten Beispiel? Danke.
Versuchen Sie es mit
int
s und long
s und sehen, was passiert. int myInt = 1L
InformationsquelleAutor worker1138 | 2010-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Umwandlung von
char
(eine 2-byte-Typ)int
(ein 4-byte-Typ) ist implizit in Java, da dies eine erweiternde Konvertierung, -- alle möglichen Werte, die Sie speichern können, in einenchar
können Sie auch speichern Sie in einerint
. Die umgekehrte Konvertierung ist nicht implizit, weil es ist eine einschränkende Konvertierung -- Sie können Informationen verloren gehen (die oberen beiden bytes desint
werden verworfen). Sie müssen immer explizit umgewandelt werden in solche Szenarien, als eine Möglichkeit zu sagen, der compiler "ja, ich weiß, diese Informationen möglicherweise verloren gehen, aber ich will immer noch, es zu tun."InformationsquelleAutor cdhowie
Wenn die C-Regeln nichts zu gehen, dein char automatisch gezwungen in einen int ohne cast in deinem ersten Beispiel, als die Umwandlung nicht um einen Verlust von Informationen.
Jedoch eine explizite Umwandlung erforderlich ist, in Ihrem zweiten Fall, wo es Potenzial zu verlieren Informationen, da ein char kleiner ist als ein int.
Ich weiß Java, ich bin nur mehr bestimmte über die Eingabe-Regeln von C. Basierend auf meinen Java-Erfahrungen, basierend auf der Tatsache, Java ist weitgehend in C-basiert und basiert auf meiner Beobachtung, dass Java nicht im Widerspruch zu den C-Regeln ich weiß, ich habe meine Antwort.
InformationsquelleAutor Nathan Pitman