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

Что выведет: изменение параметров

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

public class Main {
    static void change(StringBuilder sb, int n, String s) {
        sb.append("!");
        sb = new StringBuilder("new");
        n++;
        s += "?";
    }
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("hi");
        int n = 1;
        String s = "q";
        change(sb, n, s);
        System.out.println(sb + " " + n + " " + s);
    }
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: hi! 1 q. Метод получил копию ссылки на sb и через неё дописал !: это видно снаружи.

Что выведет

hi! 1 q

Разбор

Метод получил копию ссылки на sb и через неё дописал !: это видно снаружи. Присваивание нового StringBuilder поменяло только локальную копию. n примитив, копия увеличилась, оригинал нет. Строка неизменяема, s += "?" создал новую строку в локальной переменной.

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

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