Ich denke, es fühlt sich jetzt ziemlich gut an, aber ich wusste es nicht, also ist es mein eigenes Memo. Ich werde es bald vergessen.
Zum Beispiel
public class SwitchTest {
static final String ddd = "ddd";
static String ccc = "ccc";
public static void main(String[] args) {
String bbb = "bbb";
final String eee = "eee";
switch(args[0]) {
case "aaa":
System.out.println("aaa");
break;
case bbb:
System.out.println("bbb");
break;
case ccc:
System.out.println("ccc");
break;
case ddd:
System.out.println("ddd");
break;
case eee:
System.out.println("eee");
break;
default:
System.out.println("default");
break;
}
}
Angenommen, Sie schreiben den Code. Dies führt jedoch zu einem Kompilierungsfehler. Übrigens erscheint der folgende Fehler.
SwitchTest.java:14:Error:Erfordert einen konstanten Zeichenfolgenausdruck
case bbb:
^
SwitchTest.java:17:Error:Erfordert einen konstanten Zeichenfolgenausdruck
case ccc:
^
Kurz gesagt, es scheint, dass die Zeichenfolge, die in den Fall eingefügt werden soll, eine "Konstante" sein muss (eine letzte Klausel ist erforderlich).
Tatsächlich werden ddd ( static final
) und eee ( final
) nicht als Kompilierungsfehler extrahiert.
Wenn Sie eine Zeichenfolge direkt in den Fall schreiben ("aaa"
), wird diese hier als "Konstante" behandelt und nicht als Kompilierungsfehler extrahiert.
Nun, es ist keine "Variable". ..
Da die als Kompilierungsfehler zurückgegebene Ausgabe unverändert verwendet wird, wird das Schlüsselwort "Konstante" angezeigt. Ist dies jedoch der Name "Konstante"? Ausdruck? Es scheint nicht so zu sein. Dieser Bereich wird in [hier] beschrieben (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28). Ist es richtig, auf Japanisch "konstanter Ausdruck" zu sagen, da es sich um einen konstanten Ausdruck handelt? Demnach scheint die Operation mit "+" ein "konstanter Ausdruck" zu sein.
...
case "aaa" + "xxx":
System.out.println("aaa+xxx");
break;
...
Wenn Sie jedoch eine Variable verwenden, die nicht final als Join-Ziel hat (z. B. bbb, wie oben erwähnt) und "aaa" + bbb
ausführen, wird ein Kompilierungsfehler angezeigt.
Ich wusste es bis jetzt nicht, weil ich die switch-Anweisung nicht sehr oft als Zeichenkette verwendet habe. Ich habe viel gelernt. (?)