Что будет выведено в консоль после выполнения программы

Программа выведет []. Метод присваивает null только своей локальной копии ссылки; переменная list в main продолжает ссылаться на пустой ArrayList.

Короткий ответ

Что ответить на собеседовании

Программа выведет []. Метод присваивает null только своей локальной копии ссылки; переменная list в main продолжает ссылаться на пустой ArrayList.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой результат появится в стандартном выводе, когда запустится следующий фрагмент кода.

import java.util.ArrayList;
import java.util.List;

public class FirstTask {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        doSomething(list);
        System.out.println(list);
    }

    private static void doSomething(List<String> list) {
        list = null;
    }
}

Ответ

Программа выведет []. Метод присваивает null только своей локальной копии ссылки; переменная list в main продолжает ссылаться на пустой ArrayList.

При вызове doSomething значение ссылки копируется в параметр. Замена параметра не меняет переменную вызывающего метода. Если бы функция вызвала list.add("x"), общий объект изменился бы и main увидел [x]. Для замены самой ссылки метод должен вернуть новое значение, а вызывающий код — присвоить его своей переменной. NullPointerException в представленном фрагменте не возникает.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее