Как передаются объекты в java
В языке Java всегда используется только вызов по значению. Это значит, что метод получает копии значений всех параметров. По этой причине метод не может модифицировать содержимое ни одного параметра, переданного ему.
Кей Хорстманн, Java Библиотека профессионала Том 1, глава 4.5 Параметры методов.
В Java
объекты передаются по ссылке, а не по значению. Это означает, что при передаче объекта в метод или при присваивании переменной ссылки на объект, фактически копируется только ссылка, а не сам объект.
Например, если у вас есть класс Person
:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
И у вас есть метод, который принимает объект этого класса и изменяет его свойства:
public static void changePerson(Person person) {
person.setName("John");
person.setAge(30);
}
Вызов этого метода не создаст новый объект, а изменит свойства существующего объекта, так как объект передается по ссылке:
Person person = new Person("Jane", 25);
changePerson(person);
System.out.println(person.getName()); // => John
System.out.println(person.getAge()); // => 30
Таким образом, изменения, внесенные в объект внутри метода, будут отражаться на оригинальном объекте, на который ссылается переданная ссылка.