2016-02-11 14 views
7

Với đoạn mã sau, là 'a' (có nghĩa là loại char) tự động thăng kiểu int trong chuyển đổi trường tuyên bố?Byte, short, char tự động được thăng hạng trong câu lệnh switch?

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

}

tôi không thể tìm thấy dù Java SE7 đề cập về điều đó ..

Cảm ơn trước để làm rõ.

Kính trọng, Daniel

+0

chuyển đổi này có một 'int' và byte, char, và ngắn có thể được tự động mở rộng bất cứ khi nào cần thiết. –

+0

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

Trả lời

7

Đây là những gì đặc tả ngôn ngữ đề cập về vấn đề này. Xem this section on switch statements:

Với một tuyên bố switch, tất cả những điều sau đây phải đúng hoặc một lỗi thời gian biên dịch xảy ra:

  • Mỗi liên tục trường hợp liên quan đến báo cáo kết quả switch phải phân công phù hợp với loại tuyên bố của switchBiểu thức (§5.2).

  • ...

có nghĩa là một sự chuyển đổi thu hẹp sẽ áp dụng cho char giá trị 'a'. Giá trị số của nó là 97 có thể đại diện là byte. Tuy nhiên, giá trị 256 không phù hợp để trình biên dịch sẽ phát ra lỗi.

+0

Cảm ơn @ AR.3. Làm rõ. Đó là một điểm đáng nhớ :) – yegomosc

Các vấn đề liên quan