[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen

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.

Ein solches Beispiel führt zu einem Kompilierungsfehler

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. (?)

Recommended Posts

[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen
Stellen Sie sicher, dass der JSON des Schlangenfalls dem Feld des Kamelfalls in Java (JVM) entspricht.
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
[Java] Mach es konstant
Ich habe einen RESAS-API-Client in Java erstellt
[Java] Es scheint, dass Sie nicht "0 <hoge <10" in den bedingten Ausdruck der "if" -Anweisung schreiben können.
Zeichenfolge Ersetzen von Fällen, in denen ein Zeilenumbruch in * des regulären Ausdrucks in der Suchbedingung einer Zeichenfolge enthalten ist
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Wenn die von JNA an C ++ übergebene Zeichenfolge verstümmelt ist
Informationen zur Methode zum Konvertieren einer Zeichenfolge in eine Ganzzahl / einen Bruch (Umwandlungsdaten) in Java
Ein Programm, das nach einer Zeichenfolge sucht und die Suchzeichenfolge gefunden hat, zeigt die Zeichenfolge vom Zeilenanfang bis kurz vor der Suchzeichenfolge an.
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
[Java-Anfänger] Konvertierung von Zeichenfolge in numerischen Wert - Was ist die parseInt-Methode der Integer-Klasse? ~
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
[Java] So verwenden Sie Teilzeichenfolgen, um einen Teil einer Zeichenfolge auszuschneiden
[Java small story] Überwachen Sie, wann der Liste ein Wert hinzugefügt wird
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
[Java] Überprüfen Sie, ob die Zeichenfolge nur aus Leerzeichen besteht (= Leerzeichen)
[Swift] Vielmehr ist es sinnvoll, var zu vermeiden und nur dann mit let zu deklarieren, wenn die Zuweisung des Anfangswertes einen Zweig enthält.
Als ich eine Methode für Premium Friday erstellen wollte, war sie bereits in der Java 8-Standard-API enthalten
[Hinweis] [Anfänger] Schreiben, wenn der Wert eines Array-Elements in einem sich wiederholenden Satz von Ruby geändert wird
Ich wollte eine Diashow des Hintergrundbilds erstellen, da das Bild des Sperrbildschirms von Windows 10 wunderschön ist
[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
[Java] So erhalten Sie mithilfe von Stream auf einfache Weise die längste Zeichenfolge von ArrayList
Gibt es keinen Namenskonflikt, wenn enum in der switch-Anweisung denselben Namen hat?
So erstellen Sie eine eindeutige Datenkombination in der Schienen-Zwischentabelle
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
Bedingte Verzweigung des Ergebnisses einer SQL-Anweisung, die nur eine in Java durchsucht
Die Geschichte des einfachen String-Vergleichs in Java
Java switch Anweisung und break, Kotlin beim Ausdruck ...
Machen Sie einen Rand links vom TextField
Messen Sie die Größe eines Ordners mit Java
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Übergeben Sie die im Java8-Lambda-Ausdruck filter () verwendeten Bedingungen als Parameter
[Java] Beim Zuweisen einer Zeichenfolge zu einer Zeichenvariablen ist ein Fehler mit inkompatiblen Typen aufgetreten.
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
[Java] Beim Schreiben der Quelle ... Memorandum ①
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
So führen Sie einen bestimmten Vorgang aus, wenn die Zurück-Taste im Android-Fragment gedrückt wird
[Ruby] Gewöhnen Sie sich an, beim Erstellen einer Kopie einer Zeichenfolgenvariablen die dup-Methode zu verwenden
Es ist schwierig, die leere Zeichenfolge und das Datum von DBUnit zu verwenden. Korrigieren Sie es also und verwenden Sie es.
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
Wenn Sie eine Java-Anwendung in ein Docker-Image verwandeln möchten, ist es praktisch, Jib zu verwenden.
In Anbetracht der Einführung der Java-Sprache in der Reiwa-Ära ~ Auswahl eines sicheren SDK
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten