Ответ
Да, изменения сохраняются. В Java массивы являются ссылочными типами (objects). При передаче массива в метод передаётся копия ссылки на этот массив в памяти, а не копия самого массива. Поэтому оба метода (вызывающий и вызываемый) работают с одним и тем же массивом.
Пример, демонстрирующий поведение:
public class ArrayExample {
public static void modifyArray(int[] arr) {
// Изменяем содержимое массива по полученной ссылке
arr[0] = 100;
arr = new int[]{99, 98, 97}; // Эта строка НЕ влияет на массив в main()
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println("До вызова: " + numbers[0]); // 1
modifyArray(numbers); // Передаём копию ссылки на массив `numbers`
// Видим изменения, сделанные внутри метода
System.out.println("После вызова: " + numbers[0]); // 100
System.out.println("Весь массив: " + Arrays.toString(numbers)); // [100, 2, 3]
}
}
Ключевые моменты:
- Изменение элементов (
arr[0] = 100) — меняет исходный массив. - Переназначение ссылки (
arr = new int[]{...}) внутри метода меняет локальную переменнуюarr, но не влияет на ссылкуnumbersв методеmain. Это подтверждает, что передаётся копия ссылки.
Это правило распространяется на все ссылочные типы в Java: объекты, коллекции (List, Map), другие массивы.