Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is byte, short, char automatically promoted in switch statement?

Given the following code, is 'a' (that is of type char) automatically promoted to int type in switch-case statement?

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

}

I couldn't find whether Java SE7 mentions about that..

Thanks in advance for clarification.

Regards, Daniel

like image 825
yegomosc Avatar asked Feb 11 '16 20:02

yegomosc


1 Answers

Here's what the language specification mentions about this. See this section on switch statements:

Given a switch statement, all of the following must be true or a compile-time error occurs:

  • Every case constant associated with the switch statement must be assignment compatible with the type of the switch statement's Expression (§5.2).

  • ...

which means that a narrowing conversion will apply to the char value 'a'. Its numeric value of 97 is representable as a byte. The value 256 however does not fit so the compiler will throw an error.

like image 168
M A Avatar answered Oct 14 '22 17:10

M A