Ինչպես փոխանցվում են փոփոխականները մեթոդներին։
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-ն միշտ օգտագործում է արժեքով փոխանցում, բայց հղումային տեսակների համար՝ հղման արժեքը պատճենվում է, ոչ թե ինքն օբյեկտը։