2010-11-19 9 views
1

System: Windows Vista 32-bit, Java 6.0.2Konvertieren von Chars zu Ints in Java

Ich habe ein paar Fragen zu Zeichen zu Ints konvertieren. ich den Code unten laufen, myInt mit einem Wert von 4 verlassen:

char myChar = '4'; 
    int myInt = myChar - '0'; 

Nun ist diese Umwandlung etwas, das Java automatisch tut? Wurde der ASCII-Wert von '0' von Ascii '4' subtrahiert und dann hinter die Kulissen geworfen? Dies ist für mich verwirrend, weil, wenn ich in der umgekehrten Operation versuchen, ich habe zu werfen tatsächlich das Ergebnis als Zeichen:

int anotherInt = 5; 
    char newChar = anotherInt + '0'; //gives error 

    char newChar = (char)(anotherInt + '0'); //works fine 

Ist das auftritt, weil Java automatisch wirft (anotherInt + ‚0‘) in einem int , wie im ersten Beispiel? Vielen Dank.

+0

Probieren Sie es mit 'int's und' long's und sehen was passiert. 'int myInt = 1L' –

Antwort

22

Die Umwandlung von char (ein 2-Byte-Typ) int (ein 4-Byte-Typ) ist implizit in Java, denn dies ist eine erweiternde Konvertierung ist - alle möglichen Werte, die Sie in einem char können Sie speichern auch in einem int speichern. Die umgekehrte Konvertierung ist nicht implizit, da es sich um eine einschränkende Konvertierung handelt - sie kann Informationen verlieren (die oberen zwei Bytes von int werden verworfen). Sie müssen immer explizit in solchen Szenarien wirken, um dem Compiler zu sagen: "Ja, ich weiß, dass Informationen verloren gehen können, aber ich möchte es trotzdem tun."

+0

Danke, das macht sehr viel Sinn. – worker1138

2

Wenn C-Regeln für Sie gelten, kann Ihr Zeichen im ersten Beispiel automatisch zu einem int umgewandelt werden, da es sich bei der Konvertierung nicht um einen Informationsverlust handelt.

In Ihrem zweiten Fall ist jedoch eine explizite Umwandlung erforderlich, bei der Informationen verloren gehen können, da ein Zeichen kleiner als ein int ist.

+8

Sie sollten nicht versuchen, die Schreibregeln von Java aus C abzuleiten. Wenn Sie Java nicht beherrschen, versuchen Sie besser nicht, Java-Fragen zu beantworten, IMO. –

+4

Ich kenne Java, ich bin nur genauer über die Schreibregeln von C. Basierend auf meinen Java-Erfahrungen basiert Java auf C und basiert auf meiner Beobachtung, dass Java den C-Regeln, die ich kenne, nicht widerspricht Ich habe meine Antwort gepostet. –

Verwandte Themen