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

Ответ

Да, будет видна. В 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 (например, заставить её указывать на другой массив), но он может свободно менять содержимое массива, на который эта ссылка указывает.

Ответ 18+ 🔞

Давай разберём эту дичь, а то у меня уже волосы на жопе шевелятся от таких вопросов! Смотри, в Java всё устроено так, что когда ты суёшь массив в метод, ты по сути передаёшь не сам массив, а бумажку с его адресом. Копию этой бумажки, ёпта!

И вот эта копия бумажки ведёт ровно в ту же самую квартиру в памяти, где твой массив и живёт. Поэтому если ты внутри метода начнёшь там мебель переставлять — сортировать, элементы менять — то эти изменения останутся навсегда, блядь. Потому что ты работаешь с оригиналом, просто через дубликат адреса.

А вот саму бумажку в вызывающем коде — ту, что у тебя в main — ты изменить не сможешь. Не сможешь заставить её вдруг указывать на другой массив, новый. Это как пытаться переписать паспортные данные, просто показав ксерокс своего паспорта в окошко — нихуя не выйдет.

Смотри, как это выглядит в деле:

import java.util.Arrays;

public class Main {
    public static void sortArray(int[] 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 изменился навсегда, ему пиздец. Потому что метод sortArray получил доступ к оригинальному жилищу данных и там всё перевернул.

Итог, блядь: Менять содержимое — пожалуйста, хоть обосрись. А вот подменить сам массив в исходной переменной — хуй тебе, а не замена. Это и есть передача ссылки по значению, ёпта, вся соль и трагедия!