Sobes.tech
Junior

Ի՞նչ է նշանակում պարամետրերի փոխանցումը արժեքով։

sobes.tech AI

Պատասխան 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); // արժեքը կլինի 15

        MyObject anotherObj = new MyObject(20);
        reassignObject(anotherObj);
        // System.out.println("After reassignObject: " + anotherObj.value); // արժեքը կմնա 20
    }
}