Junior — Middle
Կարո՞ղ է փոփոխականը, որը հայտարարված է effectively final-ով, փոխել օբյեկտի ներսում։
sobes.tech AI
Պատասխան AI-ից
Java-յում, "effectively final" տերմինը նշանակում է, որ փոփոխականը փոփոխված չէ՝ այն initialization-ից հետո, չնայած այն բացահայտորեն հայտարարված չէ final բանալի բառով: Սա կարևոր է, օրինակ, այդպիսի փոփոխականների օգտագործման համար lambda արտահայտություններում կամ անանուն դասարաններում:
Եթե փոփոխականը հայտարարված է որպես effectively final, ապա նրա արժեքը փոխել հնարավոր չէ — նոր արժեք նշանակելու փորձը կբերի կոդի սխալի:
Այնուամենայնիվ, եթե այդ փոփոխականը հղում է անում օբյեկտի, ապա այդ օբյեկտի վիճակը կարող է փոխվել, քանի որ փոխվում է ոչ թե հղումը, այլ օբյեկտի ներքին դաշտերը: Օրինակ՝
final List<String> list = new ArrayList<>();
list.add("նոր տարր"); // Սա թույլատրվում է
// list = new ArrayList<>(); // Սխալ, հղումը փոխել չի կարելի
Այսպիսով, փոփոխականի արժեքը (հղումը) փոխել հնարավոր չէ, բայց այն օբյեկտի պարունակությունը, որի վրա հղում է, կարող է փոխվել։