2011-06-02 3 views
13

Je donne les résultats suivants pour la boucle:Java (x: y) exécution

for(String s : someString.split("\\s+")){ 
    //do something 
} 

-t-java exécuter la méthode split() chaque itération de la boucle, ou fait-elle une seule fois et de garder une température tableau pour itérer?

Répondre

18

Il le fait seulement une fois, et utilise ce tableau et interagit à travers lui.

Edit: de Mat Ceci est le reference

+6

Ce qui se passe est détaillé dans l'instruction [for JLS enhanced 'for'] (http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2) doc – Mat

+0

@ Mat, ça te dérange si je modifie ma réponse avec ton lien? – RMT

+1

Allez-y, je l'ai mis là juste pour ça :-) – Mat

3

Il stocke le tableau dans une variable temporaire avant de l'utiliser.

2

Pas la scission est exécutée une fois sur la chaîne et après que la itérer boucle sur le résultat

1

La méthode split est appelée une seule fois. Pensez à la structure (également appelée un pour chaque) comme suit:

  • Le deuxième argument est évalué et conservé pendant la durée de la boucle.
  • Si l'argument donne un Iterable ou est un tableau (cas particulier), une vérification est alors faite pour voir si le type du premier argument correspond aux éléments qui sont retournés.
  • Le processus entre dans la boucle et exécute le code dans la portée et quitte lorsqu'il n'y a plus d'éléments.

Plus d'informations peuvent se trouver ici: http://www.leepoint.net/notes-java/flow/loops/foreach.html

P.S: Cela fonctionne avec un minimum Java 5.

+1

Cette deuxième étape n'est-elle pas habituellement faite au moment de la compilation? – trutheality

+0

De plus, si "un tableau est itérable", vous voulez dire qu'un tableau implémente l'interface 'Iterable', c'est faux. – trutheality

+0

Peut-être. Il est difficile de dire en tant qu'EDI comme Eclipse fait une forme de compilation quand il souligne des problèmes. –