Я написал следующий тест при изучении Java расширенного цикла for:
class test
{
int number = 0;
public static void main(String args[]) {
new test();
}
public test() {
int[] numbers = getNumbers();
for(int number : numbers) {
System.out.println("number : " + number);
System.out.println("numbers[0]: " + numbers[0]);
numbers = getNumbers();
}
}
public int[] getNumbers() {
number++;
int[] numbers = new int[5];
for(int i = 0; i < numbers.length; i++)
numbers[i] = number;
return numbers;
}
}
Я был удивлен, обнаружив, что мой тест вышел:
number : 1
numbers[0]: 1
number : 1
numbers[0]: 2
number : 1
numbers[0]: 3
number : 1
numbers[0]: 4
number : 1
numbers[0]: 5
Похоже, что отдельный экземплярnumbers
создается при первом выполнении цикла и становится неизменным.Оттуда любые изменения, сделанные в numbers
, вносятся только в версию, которая существует вне условия цикла.
Я подтвердил, что поведение по крайней мере похоже на это, заменив цикл на:
for(int number : numbers) {
System.out.println("number : " + number);
numbers = null;
}
, который дал:
number : 1
number : 1
number : 1
number : 1
number : 1
Мой вопрос: чтоповедение скрыто от нас здесь?Вторая версия numbers
скопирована?Это на самом деле неизменный, или я не ткнул его достаточно сильно?Другими словами:
Что происходит под капотом расширенного цикла for?