Ի՞նչ է նշանակում պարամետրերի փոխանցումը արժեքով։
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
}
}