Передача объектов по ссылке в Java

109
07 сентября 2019, 07:10
public class Human {
    final private String name;
    private Object age;
    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Object getAge() {
        return age;
    }
    @Override
    public String toString() {
        return "name: " + name + ", age: " + age;
    }
    public static void main(String[] args) {
        Human human = new Human("George", 40);
        System.out.println(human);
        Object age = human.getAge();
        age = 50;
        System.out.println(human);

    }
}

На выходе получаю

name: George, age: 40
name: George, age: 40

Если age - это Object, то он должен передаваться по ссылке. Когда я делаю Object age = human.getAge(), то в переменную age должна записываться ссылка на Object. Соответственно, Object age и human.age должны смотреть на один и тот же адрес памяти. Почему, перезаписывая локальную переменную age, в объекте human остается старое значение age?

Answer 1

Тут у вас путаница с контекстами выполнения. Переменная age внутри метода Main не имеет отношения к переменной внутри объекта. Вы действительно записываете в age новое значение, но human.age и Main#age имеют разные адреса в пямяти.

Answer 2

Java передает все по значению. https://javarush.ru/groups/posts/857-peredacha-parametrov-v-java

READ ALSO
Изменение формата потока

Изменение формата потока

Изучаю написание программы, для плеера url потока, для хоть какого-то понимания за основу взял open source code приложение(https://github

122
RxJava очередь запросов или запрос в цикле

RxJava очередь запросов или запрос в цикле

Использую Rx, обращаюсь в сеть и в запросе передаю параметр

123
Как подключить jdb дебаггер к удалённому приложению, чтобы видеть исходники?

Как подключить jdb дебаггер к удалённому приложению, чтобы видеть исходники?

Как с помощью jdb подключить дебаггер к удалённому приложению на сервере, чтобы иметь возможность чтения исходников?

124
Зачем в Java 9 добавили List.of

Зачем в Java 9 добавили List.of

Зачем в Java 9 добавили Listof с несколькими сигнатурами?

134