Ответ
В Java все параметры передаются по значению (pass-by-value). Однако для объектных типов передается копия ссылки на объект, что создает иллюзию передачи по ссылке.
1. Передача объекта (копия ссылки):
void modifyList(List<String> listRef) { // listRef — копия ссылки из вызывающего кода
listRef.add("new element"); // Изменяет состояние того же объекта
listRef = null; // Обнуляет только локальную копию ссылки, оригинал не меняется
}
List<String> myList = new ArrayList<>();
modifyList(myList);
System.out.println(myList); // Вывод: [new element]
2. Передача примитива (копия значения):
void modifyPrimitive(int x) { // x — копия значения
x = 10; // Изменяется только локальная копия
}
int num = 5;
modifyPrimitive(num);
System.out.println(num); // Вывод: 5 (оригинал не изменился)
Итог: Механизм всегда один — pass-by-value. Для объектов это означает, что метод получает копию ссылки и может менять состояние объекта, но не может заменить сам объект, на который ссылается исходная переменная.