Sobes.tech
Junior

როგორ გადაეცემა ცვლადები მეთოდებს?

sobes.tech AI

პასუხი AI-სგან

Java-ში ცვლადები გადაეცემა მეთოდებს მნიშვნელობით.

ეს ნიშნავს, რომ როდესაც თქვენ იძახით მეთოდს, ქმნიან ცვლადის მნიშვნელობის ნუსხას და სწორედ ეს ნუსხა გადაეცემა მეთოდს. მეთოდის შიგნით განხორციელებული ცვლილებები გავლენას ახდენს მხოლოდ ამ ნუსხაზე და არ ეხება ორიგინალურ ცვლადს.

პრიმიტიული მონაცემთა ტიპებისთვის (int, float, boolean და ა.შ.) გადაეცემა პირდაპირი მნიშვნელობა.

// პრიმიტიული მონაცემთა ტიპი
int a = 10;

void changeValue(int x) {
  x = 20; // ნუსხა იცვლება, არა ორიგინალური ცვლადი 'a'
}

changeValue(a);
// მეთოდის გამოძახების შემდეგ, 'a' კვლავ 10ა

რეფერენციული ტიპებისთვის (ობიექტები, მასივები) გადაეცემა ობიექტის რეფერენციის ნუსხა. თავად რეფერენცია ნუსხად იქცევა, მაგრამ ორივე რეფერენცია მიუთითებს ერთსა და იმავე ობიექტზე მეხსიერებაში. ობიექტის მდგომარეობის ცვლილებები, რომლებიც განხორციელებულია მეთოდის შიგნით გადაცემული რეფერენციის საშუალებით, იქნება ჩანს გარეთ. თუმცა, რეფერენციის გადაყენება მეთოდის შიგნით არ ახდენს გავლენას ორიგინალურ რეფერენციაზე.

// რეფერენციული ტიპი
class MyObject {
    int value;
}

MyObject obj = new MyObject();
obj.value = 10;

void changeObjectValue(MyObject o) {
  o.value = 20; // ობიექტის მდგომარეობის შეცვლა, ჩანს გარედან
}

void reassignObject(MyObject o) {
  o = new MyObject(); // ადგილობრივი რეფერენციის გადაყენება, არ ახდენს გავლენას 'obj'-ზე
  o.value = 30;
}

changeObjectValue(obj);
// მეთოდის გამოძახების შემდეგ, obj.value 20

reassignObject(obj);
// მეთოდის გამოძახების შემდეგ, 'obj' კვლავ მიუთითებს იმავე ობიექტზე, და obj.value 20ა
// ახალი MyObject, რომელიც შექმნილია reassignObject-ში, გარედან მიუწვდომელია

საერთო ჯამში, Java ყოველთვის იყენებს მნიშვნელობით გადაცემას, მაგრამ რეფერენციული ტიპებისთვის, გადაეცემა რეფერენციის ნუსხა, არა თავად ობიექტი.