2016-02-11 13 views
7

Biorąc pod uwagę następujący kod jest 'a' (czyli typu char) automatycznie promowane na int typ w switch-case stwierdzeniem?Czy bajt, skrót, char automatycznie promuje się w instrukcji switch?

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

}

nie mogłem znaleźć, czy Java SE7 wspomina o tym ..

Z góry dzięki za wyjaśnienie.

Pozdrawiam, Daniel

+0

przełącznik bierze 'int' i bajt, char, a krótki może być automatycznie poszerzany w razie potrzeby. –

+0

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

Odpowiedz

7

Oto co specyfikacja języka wzmianki na ten temat. Zobacz this section on switch statements:

Biorąc pod uwagę switch oświadczenie, wszystkie następujące warunki muszą być spełnione lub błąd czasu kompilacji następuje:

  • Każdy przypadek stałe związany ze stwierdzeniem switch musi być przypisanie zgodny z typ wyrażenia switch Wyrażenie Wyrażenie (§5.2).

  • ...

co oznacza, że ​​konwersja zwężenie będą miały zastosowanie do wartości 'a'char. Jego wartość numeryczna 97 jest reprezentowana jako byte. Wartość 256 nie pasuje, więc kompilator wygeneruje błąd.

+0

Dzięki @ AR.3. Dobre wyjaśnienie. To punkt warty zapamiętania :) – yegomosc