web-dev-qa-db-fra.com

Java - Le retour d'une valeur rompt-il une boucle?

J'écris du code qui suit essentiellement le format suivant:

public static boolean isIncluded(E element) {
    Node<E> c = head;
    while (c != null) {
        if (cursor.getElement().equals(element)) {
            return true;
        }
        c = c.getNext();
    }
    return false;
}

Le code recherchera un élément dans une liste de nœuds. Cependant, ma question est que si la boucle while trouve l'élément où l'instruction if dit qu'elle devrait retourner vrai, va-t-elle simplement retourner vrai et rompre la boucle? De plus, s'il rompt alors la boucle, poursuivra-t-il la méthode et retournera-t-il toujours faux, ou la méthode est-elle terminée une fois qu'une valeur est retournée?

Merci

36
mark

Oui*

Oui, généralement (et dans votre cas), il sort de la boucle et revient de la méthode.

Une exception

Une exception est que s'il y a un bloc finally à l'intérieur de la boucle et entourant l'instruction return, le code du bloc finally sera exécuté avant le retour de la méthode. Le bloc finally peut ne pas se terminer - par exemple, il peut contenir une autre boucle ou appeler une méthode qui ne revient jamais. Dans ce cas, vous ne quitterez jamais la boucle ou la méthode.

while (true)
{
    try
    {
        return;  // This return technically speaking doesn't exit the loop.
    }
    finally
    {
        while (true) {}  // Instead it gets stuck here.
    }
}
87
Mark Byers

Le retour rompt la boucle et revient immédiatement de la méthode entière. Le seul code qui sera exécuté à la sortie est le corps d'une clause finally et la libération de toute instruction synchronized.

19
Keith Randall

Je dois également ajouter que si vous souhaitez interrompre l'itération actuelle de la boucle et démarrer instantanément la suivante, vous pouvez utiliser:

continue;

Comme il semble que personne ne l'a suggéré.

15
Hobbyist

Oui.

Quoi qu'il en soit, pour des questions aussi courtes que cela, je pense que vous feriez mieux (et obtenez une réponse plus tôt) de l'essayer par vous-même.

10
SJuan76

Renvoyer chaque fois que vous appelez quitte une méthode où qu'elle soit et renvoie une valeur à l'appelant.

0
cobie