Obyekt ichida effectively final deb e'lon qilingan o'zgaruvchining qiymatini o'zgartirish mumkinmi?
sobes.tech AI
AIdan javob
Java'da "effectively final" termini, o'zgaruvchi boshlang'ich qiymatdan keyin o'zgartirilmaganligini anglatadi, garchi u aniq final kalit so'zi bilan e'lon qilinmagan bo'lsa ham. Bu, masalan, bunday o'zgaruvchilarni lambda ifodalarida yoki nomlangan sinflarda ishlatishda muhimdir.
Agar o'zgaruvchi effectively final sifatida e'lon qilingan bo'lsa, uning qiymatini o'zgartib bo'lmaydi — unga yangi qiymat berishga urinish kompilyatsiya xatosiga olib keladi.
Ammo, agar bu o'zgaruvchi ob'ektga murojaat qilsa, ob'ektning holati o'zgartirilishi mumkin, chunki o'zgartiriladigan narsa referensiya emas, balki ob'ektning ichki maydonlaridir. Masalan:
final List<String> list = new ArrayList<>();
list.add("yangi element"); // Bu mumkin
// list = new ArrayList<>(); // Xato, referensiyani o'zgartirib bo'lmaydi
Shunday qilib, o'zgaruvchining qiymati (referensiya) o'zgartirilmaydi, lekin unga murojaat qiladigan ob'ektning mazmuni o'zgartirilishi mumkin.