Sobes.tech
Junior — Middle

Πώς γίνεται η μεταφορά μεταβλητών μέσω αναφοράς κατά την κλήση μεθόδων;

sobes.tech AI

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

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

Αυτό σημαίνει ότι μέσα στη μέθοδο μπορεί να αλλάξει η κατάσταση του αντικειμένου στο οποίο αναφέρεται η παράμετρος, αλλά δεν μπορεί να αλλάξει η ίδια η αναφορά ώστε να δείχνει σε άλλο αντικείμενο.

Παράδειγμα:

class MyObject {
    int value;
}

public class Example {
    public static void modifyObject(MyObject obj) {
        obj.value = 10; // αλλάζουμε την κατάσταση του αντικειμένου
        obj = new MyObject(); // αλλάζουμε το τοπικό αντίγραφο της αναφοράς
        obj.value = 20; // αυτή η αλλαγή δεν θα επηρεάσει το αντικείμενο εκτός της μεθόδου
    }

    public static void main(String[] args) {
        MyObject myObj = new MyObject();
        myObj.value = 5;
        modifyObject(myObj);
        System.out.println(myObj.value); // θα εμφανίσει 10
    }
}

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