[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante

Je pense que ça fait du bien maintenant, mais je ne le savais pas, c'est donc mon propre mémo. Je l'oublierai bientôt.

Un tel exemple entraînera une erreur de compilation

Par exemple

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;
        }
    }

Supposons que vous écriviez le code. Cependant, cela entraîne une erreur de compilation. Au fait, l'erreur suivante apparaît.


SwitchTest.java:14:Erreur:Nécessite une expression de chaîne constante
            case bbb:
                 ^
SwitchTest.java:17:Erreur:Nécessite une expression de chaîne constante
            case ccc:
                 ^

Bref, il semble que la chaîne de caractères à mettre dans la casse doit être une "constante" (une clause finale est requise). En fait, ddd ( statique final '') et eee ( final '') ne sont pas extraits comme des erreurs de compilation. De plus, si vous écrivez une chaîne de caractères directement dans le cas ("aaa"), elle sera traitée comme une "constante" ici et ne sera pas extraite comme une erreur de compilation. Eh bien, ce n'est pas une "variable". ..

Puisque la sortie renvoyée comme une erreur de compilation est utilisée telle quelle, le mot-clé "constante" est affiché, mais pour être précis, est-ce le nom "constante"? Expression? Cela ne semble pas être le cas. Cette zone est décrite dans ici. Puisqu'il s'agit d'une expression constante, est-il correct de dire «expression constante» en japonais? Par exemple, selon cela, l'opération utilisant `` + '' semble être une "expression constante".

...
    case "aaa" + "xxx":
        System.out.println("aaa+xxx");
        break;
...

Cela compile également. Cependant, si vous utilisez une variable qui n'a pas final comme cible de jointure (par exemple, bbb mentionné ci-dessus) et faites "aaa" + bbb, vous obtiendrez une erreur de compilation.

Je ne le savais pas jusqu'à présent car je n'utilisais pas très souvent l'instruction switch comme chaîne de caractères. J'ai beaucoup appris. (?)

Recommended Posts

[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante
Faire correspondre le JSON du cas du serpent au champ du cas du chameau en Java (JVM)
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
[Java] Découpez une partie de la chaîne de caractères avec Matcher et des expressions régulières
[Java] Rendez-le constant
J'ai créé un client RESAS-API en Java
[Java] Il semble que `0 <hoge <10` ne puisse pas être écrit dans l'expression conditionnelle de l'instruction ʻif`.
Chaîne Remplacement des cas où un saut de ligne est inclus dans * dans l'expression régulière de la condition de recherche
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Lorsque la chaîne de caractères transmise au C ++ par JNA est déformée
À propos de la méthode de conversion d'une chaîne de caractères en entier / fraction (données de conversion) en Java
Un programme qui recherche une chaîne de caractères, et lorsque la chaîne de caractères de recherche est trouvée, affiche la chaîne de caractères du début de la ligne juste avant la chaîne de caractères de recherche.
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
[Java débutant] Conversion d'une chaîne de caractères en valeur numérique - Quelle est la méthode parseInt de la classe Integer? ~
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
[Java] Comment utiliser une sous-chaîne pour découper une partie d'une chaîne de caractères
[Petite histoire Java] Surveiller lorsqu'une valeur est ajoutée à la liste
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Comment trouver le nombre total de pages lors de la pagination en Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Java] Vérifiez si la chaîne de caractères est composée uniquement de blancs (= Vierge)
[Swift] Au contraire, il est significatif d'éviter var et de le déclarer avec let uniquement lorsqu'il y a une branche dans l'affectation de la valeur initiale.
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Je voulais faire un diaporama du fond d'écran car l'image de l'écran de verrouillage de Windows 10 est magnifique
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
[Java] Comment obtenir facilement la plus longue chaîne de caractères d'ArrayList à l'aide de stream
N'y a-t-il pas un conflit de nom lorsque enum a le même nom dans l'instruction switch?
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
L'histoire de la comparaison de chaînes de bas niveau en Java
Instruction de commutation Java et pause, Kotlin lorsque l'expression ...
Faire une marge à gauche du TextField
Mesurer la taille d'un dossier avec Java
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Passer les conditions utilisées dans le filtre d'expression lambda Java8 () comme paramètres
[Java] Une erreur de types incompatibles s'est produite lors de l'affectation d'une chaîne de caractères à une variable de type char.
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Quand le survol d'Eclipse est difficile à voir
J'ai essayé de créer une fonction de connexion avec Java
[Java] Lors de l'écriture du source ... Mémorandum ①
[Java] Comment découper une chaîne de caractères caractère par caractère
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
Comment effectuer un processus spécifique lorsque le bouton de retour est enfoncé dans le fragment Android
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
Il est difficile d'utiliser la chaîne de caractères vide et la date de DBUnit, donc corrigez-la et utilisez-la.
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
Si vous souhaitez transformer une application Java en une image Docker, il est pratique d'utiliser jib.
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java