Назад к вопросам
Junior
70
questionbank

Что означает передача параметров по значению?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Для примитивных типов (таких как int, float, boolean и т.д.) - передается копия самого значения.

Для ссылочных типов (объектов) - передается копия ссылки на объект. Это означает, что внутри метода можно модифицировать объект, на который ссылается параметр (например, изменить поля объекта), и эти изменения будут видны вне метода, так как обе ссылки указывают на один и тот же объект в памяти. Однако, если самой ссылке внутри метода присвоить новый объект (создать новый объект и присвоить его параметру), то исходная ссылка вне метода останется без изменений.

Пример для примитивного типа:

public class PassByValueExample {

    public static void changeValue(int number) {
        number = number + 10; // Изменяем копию значения
        // System.out.println("Inside method: " + number); // Для демонстрации
    }

    public static void main(String[] args) {
        int x = 5;
        changeValue(x);
        // System.out.println("Outside method: " + x); // x останется 5
    }
}

Пример для ссылочного типа:

class MyObject {
    int value;

    MyObject(int value) {
        this.value = value;
    }
}

public class PassByValueReferenceExample {

    public static void modifyObject(MyObject obj) {
        obj.value = obj.value + 10; // Изменяем поле объекта по ссылке
    }

     public static void reassignObject(MyObject obj) {
        obj = new MyObject(100); // Присваиваем параметру новую ссылку
        // System.out.println("Inside reassignObject: " + obj.value); // Для демонстрации
    }


    public static void main(String[] args) {
        MyObject myObj = new MyObject(5);
        modifyObject(myObj);
        // System.out.println("After modifyObject: " + myObj.value); // value будет 15

        MyObject anotherObj = new MyObject(20);
        reassignObject(anotherObj);
        // System.out.println("After reassignObject: " + anotherObj.value); // value останется 20
    }
}