Sobes.tech
Junior
173

O'zgaruvchilar qanday qilib metodlarga uzatiladi?

AIdan javob

sobes.tech AI

Java'da o'zgaruvchilar metodlarga qiymat bilan o'tkaziladi.

Bu shuni anglatadiki, metod chaqirilganda, o'zgaruvchining qiymatining nusxasi yaratiladi va aynan bu nusxa metodga o'tkaziladi. Metod ichida parametrga kiritilgan o'zgarishlar faqat bu nusxaga ta'sir qiladi va asl o'zgaruvchiga ta'sir qilmaydi.

Primitiv ma'lumot turlari (int, float, boolean va boshqalar) to'g'ridan-to'g'ri qiymat bilan o'tkaziladi.

// Primitiv ma'lumot turi
int a = 10;

void changeValue(int x) {
  x = 20; // Nusxa o'zgartiriladi, 'a' asl o'zgaruvchasi emas
}

changeValue(a);
// Metod chaqirilgandan so'ng, 'a' hali ham 10

Ob'ektlar va massivlar kabi referens turlar uchun, ob'ektga referensning nusxasi o'tkaziladi. Referens o'zi nusxalanadi, lekin ikkala referens ham bir xil ob'ektga ishora qiladi. Metod ichida o'tkazilgan referens orqali ob'ekt holatiga o'zgartirishlar tashqarida ham ko'rinadi. Biroq, referensni metod ichida qayta tayinlash asl referensga ta'sir qilmaydi.

// Referens tur
class MyObject {
    int value;
}

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

void changeObjectValue(MyObject o) {
  o.value = 20; // Ob'ekt holatini o'zgartiradi, tashqaridan ko'rinadi
}

void reassignObject(MyObject o) {
  o = new MyObject(); // Mahalliy referensni qayta tayinlaydi, 'obj'ga ta'sir qilmaydi
  o.value = 30;
}

changeObjectValue(obj);
// Metod chaqirilgandan so'ng, obj.value 20

reassignObject(obj);
// Metod chaqirilgandan so'ng, 'obj' hali ham bir xil ob'ektga ishora qiladi, va obj.value 20
// reassignObject ichida yaratilgan yangi MyObject tashqaridan kirish mumkin emas

Shunday qilib, Java har doim qiymat bilan o'tkazishni ishlatadi, lekin referens turlari uchun, referensning qiymati nusxalanadi, ob'ekt emas.