Jim*_*mmy 6 java scjp switch-statement java-6 ocpjp
在昨晚阅读了一些SCJP认证后,我开始考虑切换语句以及如何评估表达式,我对某些事情感到有些困惑.
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您尝试在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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
最终,我无法进入案例,('c' | 'd')因为它可能会评估为布尔值...
所以我的问题是:
('c' | 'd')?Psh*_*emo 12
'c' | 'd'不会返回布尔值.在这种情况下|是按位或不是布尔OR.
您可以在此示例中看到它是如何计算的
System.out.println(Integer.toBinaryString('c'));
System.out.println(Integer.toBinaryString('d'));
System.out.println("=======");
System.out.println(Integer.toBinaryString('c' | 'd'));
Run Code Online (Sandbox Code Playgroud)
产量
1100011
1100100
=======
1100111
Run Code Online (Sandbox Code Playgroud)
二进制1100111等于103十进制整数,因此它是有效的 case参数.
'c' | 'd'是一个按位或导致'g',在开关中有效.
您可以匹配多个案例而无需转到if语句
switch(theChar) {
case 'a':
break;
case 'b':
break;
case 'c':
case 'd':
System.out.println("c or d");
break;
default:
throw new IllegalStateException();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |