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