Ответ вслух Junior Основы: типы, обёртки, static спрашивают часто обновлено

Передача параметров в Java

Вопрос

Java передаёт аргументы по ссылке или по значению? Объясни на примере.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Всегда по значению. Для примитива копируется число, для объекта копируется ссылка.

Что должно прозвучать в ответе

  • Всегда по значению

  • Для объектов копируется ссылка, а не объект

  • Метод может менять состояние объекта через копию ссылки

  • Присваивание параметру новой ссылки не видно снаружи

  • Пример со swap двух объектов, который не работает

Что могут спросить следом

  • Как тогда вернуть из метода два значения?
  • Что будет со String-параметром, если сделать s += "x"?

Разбор

Всегда по значению. Для примитива копируется число, для объекта копируется ссылка. Поэтому, если метод вызывает list.add(x), изменение видно снаружи: обе ссылки указывают на один объект. А если внутри метода написать list = new ArrayList<>(), поменяется только локальная копия, переменная вызывающего продолжит указывать на старый список. Классическая проверка: метод swap(a, b) для двух объектов в Java ничего не меняет у вызывающего. Со строками то же самое, плюс String неизменяем: s += "x" создаёт новую строку и присваивает её локальной копии. Вернуть несколько значений можно через record, массив или объект-результат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.