Прочитав кое-что из сертификации SCJP прошлой ночью, я задумался об операторах switch и о том, как оцениваются выражения, и что-то меня немного озадачило.
Java не позволит вам включить логическое значение, поэтому следующее не будет компилироваться:
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");
}
}
}
Однако компилятор не будет жаловаться, если вы попытаетесь использовать выражение, которое оценивается как логическое значение в блоке case, например:
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");
}
}
}
В конечном счете, я никогда не смогу вникнуть в дело ('c' | 'd')
, так как оно, по-видимому, будет иметь логическое значение...
Итак, мой вопрос:
('c' | 'd')
?