Nachdem ich letzte Nacht etwas von der SCJP-Zertifizierung gelesen hatte, habe ich über Switch-Anweisungen nachgedacht und darüber, wie die Ausdrücke bewertet werden, und ich bin etwas verwirrt über etwas.Warum ist ein boolescher Ausdruck in einem Case-Block gültig, wenn Boolesche Datentypen für Switches nicht unterstützt werden?
Java lassen Sie nicht auf einem boolean schalten, so dass die folgenden nicht kompiliert:
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");
}
}
}
jedoch der Compiler wird nicht beschweren, wenn Sie versuchen, einen Ausdruck zu verwenden, um einen Booleschen Wert zurück ein Fall, Block, wie zB:
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");
}
}
}
Letztlich kann ich nicht immer in den Fall ('c' | 'd')
bekommen, da es vermutlich zu einer boolean bewerten würde ...
Also meine Frage ist:
- Warum ist es legal, so etwas wie
('c' | 'd')
zu benutzen? - Wie könnte das jemals nützlich sein, da das unerreichbar wäre
- Wenn Sie jemals auf mehr als einen Wert, aber ohne Verwendung eines Standardfalls, wollte, ist Ihre einzige Wahl als if-else-Anweisung neu zu implementieren ?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html # jls-15.22.1 – Mat
Warum wäre es nicht erreichbar? –
Probieren Sie '' c '&' d''was passt' oder 'c' + 'd' das entspricht und 'c'/'d' entspricht dem Nullbyte \ 0;) –