Sobes.tech
Junior

Πώς περνιούνται οι παράμετροι στις μεθόδους στην Java;

sobes.tech AI

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

Στη Java, οι παράμετροι στις μεθόδους περνάνε με τιμή (pass-by-value).

Τυπικοί τύποι:

  • Μεταδίδεται ένα αντίγραφο της τιμής του τυπικού τύπου. Η αλλαγή της παραμέτρου μέσα στη μέθοδο δεν επηρεάζει την αρχική μεταβλητή έξω από αυτή.
// Παράδειγμα για τυπικό τύπο
public void changeValue(int x) {
    x = x + 10; // Το αντίγραφο του x μέσα στη μέθοδο αλλάζει
}

// Χρήση:
int original = 5;
changeValue(original);
// Το original παραμένει 5

Αντικείμενα (τύποι αναφοράς):

  • Μεταδίδεται ένα αντίγραφο της αναφοράς στο αντικείμενο. Και οι δύο αναφορές (η αρχική και αυτή στη μέθοδο) δείχνουν στο ίδιο αντικείμενο στη μνήμη.
  • Η αλλαγή της κατάστασης του αντικειμένου (π.χ. κλήση setter, τροποποίηση πεδίων) μέσω της μεταδομένης αναφοράς μέσα στη μέθοδο θα επηρεάσει το αρχικό αντικείμενο.
  • Η επαναπροσδιορισμός της παραμέτρου σε νέο αντικείμενο μέσα στη μέθοδο δεν θα αλλάξει την αρχική αναφορά έξω από αυτή.
// Παράδειγμα για τύπο αναφοράς (αντικείμενο)
public class MyObject {
    private int value;

    public MyObject(int value) {
        this.value = value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public void modifyObject(MyObject obj) {
    obj.setValue(100); // Αλλάζει την κατάσταση του αρχικού αντικειμένου
}

public void reassignObject(MyObject obj) {
    obj = new MyObject(200); // Το αντικείμενο δείχνει τώρα σε νέο αντικείμενο, η αρχική αναφορά δεν αλλάζει
}

// Χρήση:
MyObject originalObject = new MyObject(10);
modifyObject(originalObject);
// Το originalObject έχει τώρα value = 100

MyObject anotherObject = new MyObject(50);
reassignObject(anotherObject);
// Το anotherObject εξακολουθεί να δείχνει στο αρχικό αντικείμενο με value = 50

Εν κατακλείδι: Μεταδίδεται η τιμή της αναφοράς (η διεύθυνση), όχι το ίδιο το αντικείμενο. Αυτό επιτρέπει την τροποποίηση του αντικειμένου μέσω αυτής της αναφοράς, αλλά όχι την αλλαγή της αρχικής αναφοράς σε άλλο αντικείμενο.