- - Κατανόηση του Call By Value και Call By Reference στην Java

Κατανόηση του Call By Value και Call By Reference στην Java

Εισαγωγή

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

Σε κλήση ανά αξία , η τιμή ενός όρου αντιγράφεται στην τυπική παράμετρο της υπορουτίνας. Οι αλλαγές που έγιναν στην παράμετρο της υπορουτίνας δεν έχουν καμία επίδραση στο όρισμα.

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

Θα εξηγήσουμε και τους δύο τρόπους για να περάσουμε το επιχείρημα σε μια μέθοδο στην Java με αυτά τα παραδείγματα.

Πρόγραμμα για την τιμή κλήσης

class Employee{
double salary;
int age;
void incrementSalAndAge(double sal, int a){
salary = sal+10000;
age = a+7;
System.out.println("Salary on call: "+salary);
System.out.println("Salary on call: "+age);
}
}
class CallByValueDemo{
public static void main(String args[]){
Employee employee = new Employee();
double salary = 34521.86;
int age = 23;
System.out.println("Salary before call: "+salary);
System.out.println("Salary before call: "+age);
employee.incrementSalAndAge(salary,age);
System.out.println("Salary after call: "+salary);
System.out.println("Salary after call: "+age);
}
}

Παραγωγή

call_by_value

Πρόγραμμα για αναφορά κλήσης

class Employee{
double salary;
int age;
void incrementSalAndAge(Employee emp){
salary = emp.salary+10000;
age = emp.age+7;
System.out.println("Salary on call: "+emp.salary);
System.out.println("Salary on call: "+emp.age);
}
}
class CallByRefDemo{
public static void main(String args[]){
Employee employee = new Employee();
employee.salary = 34512.37;
employee.age = 23;
System.out.println("Salary before call: "+employee.salary);
System.out.println("Salary before call: "+employee.age);
employee.incrementSalAndAge(employee);
System.out.println("Salary after call: "+employee.salary);
System.out.println("Salary after call: "+employee.age);
}
}

Παραγωγή

call_by_reference

Επεξήγηση του Java Code & Output

Αν δείτε το πρώτο πρόγραμμα, θα διαπιστώσετε ότι έχουμε γράψει μια μέθοδο incrmentSalAndAge () όπου στέλνουμε τιμές των παραδειγμάτων στις επίσημες παραμέτρους της ίδιας μεθόδου. Πριν καλέσετε ΕΝΙΣΧΥΣΗ(), έχουμε εκτυπώσει τις τιμές των επιχειρημάτων που θα περάσουν στην πραγματικότητα. Στη συνέχεια, έχουμε ενημερώσει τις τιμές των παραδειγμάτων στο ΕΝΙΣΧΥΣΗ() και να εκτυπωθεί.

Μπορείτε να δείτε εκεί θα εκτυπώσει το ενημερωμένοτιμές των τυπικών παραμέτρων. Μετά την απομάκρυνση από την υπορουτίνα, αυτές οι ενημερωμένες τιμές δεν θα υπάρχουν πλέον. Και θα εκτυπώσει τις τιμές των παραμέτρων που αποθηκεύτηκαν μέσα στα επιχειρήματα πριν την κλήση ΕΝΙΣΧΥΣΗ(). Συμπερασματικά, μπορούμε να πούμε ότι οι αλλαγές που έγιναν στην παράμετρο της υπορουτίνας δεν έχουν καμία επίδραση στο επιχείρημα.

Τώρα, στο δεύτερο πρόγραμμα θα δείτε αντί να περάσετε τις τιμές που αποθηκεύονται στα επιχειρήματα που έχουμε περάσει την αναφορά του αντικειμένου ΕΝΙΣΧΥΣΗ(). Έτσι, όταν μεταβιβάσετε αυτή την αναφορά σε μια μέθοδο, η παράμετρος που την λαμβάνει θα αναφέρεται στο ίδιο αντικείμενο με αυτό που αναφέρεται από το όρισμα. Από την έξοδο μπορείτε να το κάνετε εύκολα. Πριν καλέσετε ΕΝΙΣΧΥΣΗ() έχουμε εκτυπωμένες τιμές των arguments.It έχει εκτυπώσει τις τιμές με τις οποίες τα αρχικά επιχειρήματα.

Κατά την επίκληση της μεθόδου ΕΝΙΣΧΥΣΗ(), η μέθοδος προϋποθέτει την ενημέρωση των τιμώντων τυπικών παραμέτρων και να εκτυπωθεί η ενημερωμένη τιμή. Αφού επέστρεψε από την κλήση, έχει εκτυπώσει τις ενημερωμένες τιμές για τα επιχειρήματα. Συνεπώς, οι αλλαγές που έγιναν στην παράμετρο θα επηρεάσουν το όρισμα που χρησιμοποιείται για την κλήση της υπορουτίνας, επειδή τόσο η παράμετρος όσο και η τυπική παράμετρος αναφέρονται στο ίδιο αντικείμενο.

Θυμηθείτε, αυτές οι έννοιες είναι πολύ χρήσιμες για την κατανόηση Αντιγραφή κατασκευαστών σε Java.

Ελέγξτε πιο χρήσιμα tutorials και οριστικές οδηγίες σχετικά με τον προγραμματισμό Java εδώ.

Σχόλια