Sobes.tech
Junior — Middle

Μπορεί να αλλάξει την τιμή μιας μεταβλητής που έχει δηλωθεί ως effectively final μέσα σε ένα αντικείμενο;

sobes.tech AI

Απάντηση από AI

Στην Java, ο όρος "effectively final" σημαίνει ότι μια μεταβλητή δεν έχει τροποποιηθεί μετά την αρχικοποίησή της, αν και δεν έχει δηλωθεί ρητά με τη λέξη-κλειδί final. Αυτό είναι σημαντικό, για παράδειγμα, για τη χρήση τέτοιων μεταβλητών σε εκφράσεις lambda ή ανώνυμες κλάσεις.

Εάν μια μεταβλητή δηλωθεί ως effectively final, δεν μπορεί να αλλάξει η τιμή της — η προσπάθεια να της αποδοθεί μια νέα τιμή θα προκαλέσει σφάλμα μεταγλώττισης.

Ωστόσο, εάν αυτή η μεταβλητή αναφέρεται σε ένα αντικείμενο, η κατάσταση του αντικειμένου μπορεί να τροποποιηθεί, καθώς αλλάζει όχι η αναφορά, αλλά τα εσωτερικά πεδία του αντικειμένου. Για παράδειγμα:

final List<String> list = new ArrayList<>();
list.add("νέα στοιχείο");  // Αυτό επιτρέπεται

// list = new ArrayList<>();  // Σφάλμα, δεν μπορεί να αλλάξει η αναφορά

Έτσι, η τιμή της μεταβλητής (η αναφορά) δεν μπορεί να αλλάξει, αλλά το περιεχόμενο του αντικειμένου στο οποίο αναφέρεται μπορεί να τροποποιηθεί.