Comment fonctionne réellement la boucle for-each en Java ? Explication détaillée avec des exemples
Bonjour à tous ! J'ai commencé à étudier Java récemment et j'ai rencontré la boucle for-each. Apparemment, tout est clair : for (int x : numbers) { ... } — elle parcourt simplement les éléments d'un tableau ou d'une collection. Mais quand j'ai commencé à creuser plus profondément, beaucoup de questions ont surgi.
Par exemple, j'ai écrit ce code :
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String s : list) {
if (s.equals("B")) {
list.remove(s); // ConcurrentModificationException !
}
}
Et j'ai obtenu une ConcurrentModificationException. Pourquoi ? Pourtant, dans un for normal (int i = 0; i < list.size(); i++), cela ne se produit pas.
Un autre exemple — j'ai essayé de modifier les éléments d'un tableau via for-each :
int[] arr = {1, 2, 3};
for (int x : arr) {
x = x * 2; // Ne fonctionne pas ! Le tableau n'a pas changé
}
Pourquoi x ne fait-il pas référence à l'élément du tableau ? Et que se passe-t-il réellement "sous le capot" ? La boucle for-each peut-elle fonctionner avec n'importe quel type de données ? Comment le compilateur