04
Мар
2016

Вопрос по ссылкам на объекты

У меня есть программа:

class Main {
    public static void main(String args[]) {
        MyInt a = new MyInt(5);
        MyInt b = new MyInt(10);
        MyInt c = new MyInt(0);

        System.out.println("Начальные значения:");
        System.out.println("a = " + a.getNum());
        System.out.println("b = " + b.getNum());
        System.out.println("c = " + c.getNum());

        c = a;
        a = b;
        b = c;

        System.out.println("Конечные значения:");
        System.out.println("a = " + a.getNum());
        System.out.println("b = " + b.getNum());
        System.out.println("c = " + c.getNum());
    }
}

class MyInt {
    private int num;

    MyInt(int n) { num = n; }

    void setNum(int n) { num = n; }
    int getNum() { return num; }
}

По смыслу действия во время присваивания такие:

  1. с присваивается ссылка на а.
  2. а присваивается ссылка на b (по скольку а ссылается на b, то и с должна ссылаться на b);
  3. b присваивается ссылка на с (а по скольку с должна ссылаться на b, тогда b присваивается ссылка на b).

В результате, везде должны быть ссылки на b и, при выводе getNum, везде должно быть число 10. Но результат такой:

Начальные значения:
a = 5
b = 10
c = 0
Конечные значения:
a = 10
b = 5
c = 5

Почему такой результат? Разве непримитивным типам данных присваются не ссылки? Объясните, пожалуйста, в чем я ошибаюсь?

Источник: https://ru.stackoverflow.com/questions/499735/%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81-%D0%BF%D0%BE-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%D0%BC-%D0%BD%D0%B0-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B

Share

Тебе может это понравится...