Maison > Java > javaDidacticiel > Pourquoi Findbugs signale-t-il les instructions Break omises dans les instructions Java Switch ?

Pourquoi Findbugs signale-t-il les instructions Break omises dans les instructions Java Switch ?

Linda Hamilton
Libérer: 2024-10-29 11:42:02
original
813 Les gens l'ont consulté

  Why Does Findbugs Flag Omitted Break Statements in Java Switch Statements?

Instructions Switch : les dangers des pauses omises

En Java, les instructions switch offrent un moyen pratique de gérer plusieurs options de cas. Cependant, l'omission des instructions break peut entraîner des erreurs subtiles et un comportement inattendu. Findbugs, un outil d'analyse statique, signale de telles occurrences, signalant les erreurs lorsqu'un cas "passe" au suivant.

Considérez le code suivant :

<code class="java">switch(x) {

    case 0:
        // code

    case 1:
        // code

    case 2:
        // code
}</code>
Copier après la connexion

Findbugs génère spécifiquement une erreur sur la deuxième déclaration de cas. En effet, en l'absence d'instruction break, l'exécution passe aux cas suivants après l'exécution du code du cas en cours.

Pour mieux comprendre ce comportement, examinons un exemple :

<code class="java">switch (foo) {
    case 0:
        doSomething();
    case 1:
        doSomethingElse();
    default:
        doSomeOtherThing();
}</code>
Copier après la connexion

Si foo vaut 0, les trois fonctions doSomething, doSomethingElse et doSomeOtherThing seront exécutées dans cet ordre. Cependant, si foo vaut 1, seuls doSomethingElse et doSomeOtherThing s'exécuteront. Ce comportement peut ne pas refléter la logique prévue.

En revanche, l'ajout d'instructions break à chaque cas garantit que seule la fonction prévue est exécutée :

<code class="java">switch (foo) {
    case 0:
        doSomething();
        break;
    case 1:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>
Copier après la connexion

Dans ce code, une seule fonction sera être exécuté en fonction de la valeur de foo.

Des outils tels que l'indicateur Findbugs ont omis les pauses pour mettre en évidence les erreurs potentielles et garantir le comportement prévu des instructions switch. Cependant, dans certains cas, il est acceptable d'omettre les ruptures lorsque plusieurs cas représentent une plage contiguë de valeurs avec des conséquences identiques :

<code class="java">switch (foo) {
    case 0:
    case 1:
        doSomething();
        break;
    case 2:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>
Copier après la connexion

Ce code appelle intentionnellement doSomething lorsque foo vaut 0 ou 1. La plupart des outils d'analyse ne signalerait pas cela comme une erreur puisqu'il n'y a pas de code intermédiaire entre les cas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal