Sau khi đọc một số chứng nhận SCJP tối qua, tôi đã suy nghĩ về các câu lệnh chuyển đổi và cách các biểu thức được đánh giá, và tôi hơi bối rối bởi một điều gì đó.Tại sao biểu thức boolean hợp lệ trong khối chữ hoa, khi boolean không được hỗ trợ kiểu dữ liệu cho các công tắc?
Java sẽ không cho phép bạn bật một boolean, vì vậy sau đây sẽ không biên dịch:
public static void switchOnBoolean(boolean theBool)
{
System.out.println("\n\nAssessing boolean :" + theBool);
// line below won't compile, since booleans are not valid for the switch statement
switch(theBool)
{
case true:
{
System.out.println("The boolean was true");
break;
}
case false:
{
System.out.println("The boolean was false");
}
}
}
Tuy nhiên, trình biên dịch sẽ không phàn nàn nếu bạn cố gắng sử dụng một biểu thức để đánh giá một giá trị boolean trong một khối trường hợp, chẳng hạn như:
public static void switchOnChar(char theChar)
{
System.out.println("\n\nAssessing char : " + theChar);
switch(theChar)
{
case 'a':
{
System.out.println("The char was a");
break;
}
case 'b':
{
System.out.println("The char was b");
break;
}
case ('c' | 'd'):
{
System.out.println("The char was c or d");
break;
}
default:
{
System.out.println("The char didn't match anything, must be something else");
}
}
}
Cuối cùng, tôi không thể bao giờ nhận được vào các trường hợp ('c' | 'd')
vì nó có lẽ sẽ đánh giá để một boolean ...
Vì vậy, câu hỏi của tôi là:
- Tại sao nó hợp pháp để sử dụng một cái gì đó như
('c' | 'd')
? - Làm cách nào có thể hữu ích, vì điều đó sẽ không thể truy cập được
- Nếu bạn muốn trường hợp nhiều hơn một giá trị, nhưng không sử dụng mặc định, là lựa chọn duy nhất của bạn để triển khai lại dưới dạng tuyên bố if-else ?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html # jls-15.22.1 – Mat
Tại sao nó không thể truy cập được? –
Thử ''c' & 'd'' khớp với' hoặc' c '+' d 'khớp với Ç và' c '/' d 'khớp với byte nul \ 0;) –