2016-02-11 3 views
7

der folgende Code angegeben, ist 'a' (das von Typ char) automatisch Anweisung int type in switch-case gefördert?Wird Byte, Kurz, Char in switch-Anweisung automatisch hochgestuft?

void testSwitch(byte x) { 
    switch(x) { 
     case 'a': // 1 
     case 256: // 2 
     default: // 3 
     case 1: // 4 
    } 

}

konnte ich nicht finden, ob Java SE7 darüber erwähnt ..

Vielen Dank im Voraus für die Klarstellung.

Grüße, Daniel

+0

Schalter nimmt einen 'int' und Byte, char, und Short kann bei Bedarf automatisch erweitert werden. –

+0

[der Typ von '0'] (https://groups.google.com/forum/#!topic/java-lang-fans/0zGzPygyJSU) – ZhongYu

Antwort

7

Hier ist, was die Sprachspezifikation darüber erwähnt. this section on switch statements Siehe:

eine switch Anweisung gegeben, die alle der folgenden Bedingungen erfüllt sein müssen, oder ein Fehler bei der Kompilierung auftritt:

  • Jeder Fall konstant mit der Aussage switch zugeordnet Zuordnung kompatibel mit dem sein muss, Art der switch Anweisung Ausdruck (§5.2).

  • ...

was bedeutet, dass eine Verengung Umwandlung 'a' zum char Wert gelten. Sein numerischer Wert von 97 ist als byte darstellbar. Der Wert 256 passt jedoch nicht, so dass der Compiler einen Fehler verursacht.

+0

Danke @ AR.3. Gute Klärung. Es ist ein Punkt, an den man sich erinnern sollte :) – yegomosc