
- массивы примитивных типов передают свои элементы в foreach по значению
- массивы/коллекции объектов передают свои элементы в foreach по копии ссылки
foreach не изменяет элементы массивов примитивных типов, т.к. примитивы являются неизменяемыми.
int[] arr = {1, 2, 3, 4, 5};
for (int item : arr) {
item *= 2;
} //[1, 2, 3, 4, 5]
В случае объектов foreach воздействует на элементы массива/коллекции через ссылку, что отображается в самом массиве/коллекции.
StringBuilder[] sb = {new StringBuilder("one"),
new StringBuilder("two"),
new StringBuilder("three")};
for (StringBuilder item : sb) {
item.append("!");
} // [one!, two!, three!]
foreach воздействует на элемент массива через копию ссылки на объект.
for (StringBuilder item : sb) {
item = null;
} // [one, two, three]
Здесь item - копия ссылки на элемент массива. Только эта копия проинициализирована значением null, а ссылка, являющаяся элементом массива, осталась неизменной.