Будет ли видна сортировка массива, выполненная внутри вызванного метода, в вызывающем коде?

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

Ответ

Да, будет видна. В Java массивы являются объектами, и ссылка на массив передаётся в метод по значению. Это означает, что метод получает копию этой ссылки, которая указывает на тот же самый массив в памяти. Поэтому любые изменения содержимого массива внутри метода отражаются на исходном массиве.

Практический пример:

import java.util.Arrays;

public class Main {
    public static void sortArray(int[] arr) {
        // Сортирует массив, на который ссылается параметр arr
        Arrays.sort(arr);
    }

    public static void main(String[] args) {
        int[] numbers = {3, 1, 4, 1, 5};
        System.out.println("До: " + Arrays.toString(numbers)); // До: [3, 1, 4, 1, 5]

        sortArray(numbers); // Передаём ссылку на массив 'numbers'

        System.out.println("После: " + Arrays.toString(numbers)); // После: [1, 1, 3, 4, 5]
    }
}

Ключевой момент: Метод не может изменить саму ссылку numbers в main (например, заставить её указывать на другой массив), но он может свободно менять содержимое массива, на который эта ссылка указывает.