昨晚阅读了一些 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')
? - 那怎么可能有用,因为那将无法到达
- 如果您想要对多个值进行大小写,但不使用默认值,那么您唯一的选择是重新实现为 if-else 语句吗?