Разбор передачи аргументов в Java‑метод

Java всегда передаёт аргументы по значению: для объекта копируется ссылка. После doIt переменная a указывает на объект №1, instanceNumber = 1, x = 12, y = 22, z = 3.

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

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

Java всегда передаёт аргументы по значению: для объекта копируется ссылка. После doIt переменная a указывает на объект №1, instanceNumber = 1, x = 12, y = 22, z = 3.

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

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

Условие

Перепишите код, учитывая особенности передачи параметров по значению и по ссылке. Опишите, что происходит, когда переменные z и a передаются в метод doIt(). Какие значения будут у a, a.instanceNumber, a.x, a.y и z после завершения метода? Каково действие строки a = new A(2); внутри метода и почему оно ведёт себя именно так?

public class A {
    private static int y;
    private final int instanceNumber;
    private int x;

    public A(int instanceNumber) {
        this.instanceNumber = instanceNumber;
    }

    public String toString() {
        return String.valueOf(instanceNumber);
    }

    private static void doIt(int i, A a) {
        i = 11;
        a.x = 12;
        y = 13;
        a = new A(2); // ?
        a.x = 21;
        y = 22;
    }

    public static void main(String[] args) {
        A a = new A(1); // 1
        a.x = 1;
        y = 2;
        int z = 3;

        A.doIt(z, a);
    }
}

Ответ

Java всегда передаёт аргументы по значению: для объекта копируется ссылка. После doIt переменная a указывает на объект №1, instanceNumber = 1, x = 12, y = 22, z = 3.

Локальное i = 11 не меняет z. Первое a.x = 12 меняет общий объект, но a = new A(2) перенаправляет только параметр метода: переменная main не затрагивается. Затем x = 21 записывается во второй объект, а статическое y = 22 видно через весь класс. Если нужно заменить объект у вызывающего кода, верните новый A из метода и явно присвойте результат a.

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

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

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

Подробнее