Сохраняются ли изменения в массиве, переданном в метод Java?

«Сохраняются ли изменения в массиве, переданном в метод Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, изменения сохраняются. В 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), другие массивы.