Sobes.tech
Junior — Senior
52

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

Условие задачи

Перепишите код, учитывая особенности передачи параметров по значению и по ссылке. Опишите, что происходит, когда переменные 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);
    }
}