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?
Тут у вас путаница с контекстами выполнения. Переменная age внутри метода Main не имеет отношения к переменной внутри объекта. Вы действительно записываете в age новое значение, но human.age и Main#age имеют разные адреса в пямяти.
Java передает все по значению. https://javarush.ru/groups/posts/857-peredacha-parametrov-v-java
Сборка персонального компьютера от Artline: умный выбор для современных пользователей