Передача параметров в Java
Вопрос
Java передаёт аргументы по ссылке или по значению? Объясни на примере.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Всегда по значению
Для объектов копируется ссылка, а не объект
Метод может менять состояние объекта через копию ссылки
Присваивание параметру новой ссылки не видно снаружи
Пример со swap двух объектов, который не работает
Что могут спросить следом
- Как тогда вернуть из метода два значения?
- Что будет со String-параметром, если сделать
s += "x"?
Разбор
Всегда по значению. Для примитива копируется число, для объекта копируется ссылка. Поэтому, если метод вызывает list.add(x), изменение видно снаружи: обе ссылки указывают на один объект. А если внутри метода написать list = new ArrayList<>(), поменяется только локальная копия, переменная вызывающего продолжит указывать на старый список. Классическая проверка: метод swap(a, b) для двух объектов в Java ничего не меняет у вызывающего. Со строками то же самое, плюс String неизменяем: s += "x" создаёт новую строку и присваивает её локальной копии. Вернуть несколько значений можно через record, массив или объект-результат.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
int и Integer: в чём разница
Следующий вопрос
Что выведет: поля и статические методы при наследовании
Термины по теме
Ещё по теме «Основы: типы, обёртки, static»
- char плюс int
- Изменили константу в библиотеке
- Деньги в double
- Ключ Long и get(int)
- final ссылка на список
- Автоупаковка
- Порядок инициализации
- Примитивы Java