Добавить в корзинуПозвонить
Найти в Дзене
DEBAGanov

Java 685. Как передается значение переменной (по ссылке/значению)?

В Java все передается по значению, даже объекты передаются по значению ссылки на них. Это значит, что когда вы передаете переменную в метод, то передается ее значение, которое можно изменять внутри метода, но наружу метода это не влияет. Однако, если переменная ссылается на объект, то передается копия ссылки на объект, который находится в хипе, а не сам объект. Таким образом, если вы изменяете объект в методе, то эти изменения будут видны наружу метода, потому что ссылки снаружи и внутри метода указывают на один и тот же объект в хипе. Например, рассмотрим класс Person: class Person {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
} Теперь вызовем метод, который изменяет значение поля name переданного объекта: public static void changeName(Person p) {
p.setName("John");
} Используя этот метод можно изменить имя объекта p, который был передан в метод: Person p = new Person();
p.

В Java все передается по значению, даже объекты передаются по значению ссылки на них. Это значит, что когда вы передаете переменную в метод, то передается ее значение, которое можно изменять внутри метода, но наружу метода это не влияет. Однако, если переменная ссылается на объект, то передается копия ссылки на объект, который находится в хипе, а не сам объект. Таким образом, если вы изменяете объект в методе, то эти изменения будут видны наружу метода, потому что ссылки снаружи и внутри метода указывают на один и тот же объект в хипе.

Например, рассмотрим класс Person:

class Person {
private String name;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

Теперь вызовем метод, который изменяет значение поля name переданного объекта:

public static void changeName(Person p) {
p.setName("John");
}

Используя этот метод можно изменить имя объекта p, который был передан в метод:

Person p = new Person();
p.setName("Tom");
System.out.println(p.getName()); // output: Tom changeName(p);
System.out.println(p.getName()); // output: John

Как видно, имя объекта p было изменено в методе changeName, но эти изменения были видны и при обращении к объекту p снаружи метода.

Любые примитивные типы передаются по значению, если вы попытаетесь изменить их значение в методе, то это никак не отразится на оригинальном значении.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov