1: Apa yang Lewat Nilai
Ini berarti bahwa ketika suatu metode dipanggil, parameter yang diteruskan dilewati oleh salinan nilai. Contohnya adalah sebagai berikut:
kelas publik Temptest {private void test1 (int a) {// lakukan sesuatu} public static void main (string [] args) {Temptest t = new Temptest (); int a = 3; t.test1 (a); // parameter yang diteruskan di sini adalah untuk melewati nilai}}Karakteristik penting dari nilai lewat: apa yang disahkan adalah salinan nilai, yang berarti bahwa itu tidak terkait satu sama lain setelah lewat.
Contohnya adalah sebagai berikut:
kelas publik Temptest {private void test1 (int a) {a = 5; System.out.println ("Metode test1 a ="+a); } public static void main (string [] args) {Temptest t = new Temptest (); int a = 3; t.test1 (a); // Setelah lewat, perubahan nilai variabel metode test1 tidak mempengaruhi sistem.out.println ("Metode utama a ="+a); }}Hasil operasi adalah:
a = 5 dalam metode test1 a = 3 dalam metode utama
2: Apa yang lewat dengan referensi
Ini mengacu pada parameter yang diteruskan ketika metode dipanggil, dan parameter yang diteruskan dilewati dengan referensi. Bahkan, alamat referensi yang diteruskan adalah alamat ruang memori yang sesuai dengan variabel.
Contohnya adalah sebagai berikut:
kelas publik Temptest {private void test1 (a) {} public static void main (string [] args) {Temptest t = new Temptest (); A = a a () baru; t.test1 (a); // Parameter yang diteruskan di sini adalah untuk melewati referensi}} kelas A {public int age = 0; }3: Karakteristik penting dari passing dengan referensi
Apa yang dilewatkan adalah referensi ke nilai, yang berarti bahwa baik sebelum dan sesudah titik passing ke referensi yang sama (yaitu, ruang memori yang sama).
Contohnya adalah sebagai berikut:
kelas publik Temptest {private void test1 (a a) {A.age = 20; usia = "+A.age di System.out.println (" Metode test1 = "+a.age);} public static void main (string [] args) {Temptest t = new Temptest (); a a = baru a (); a.age = 10; t.test1 (a); usia ="+A.age di System.out.println ("maintest1 (a); usia ="+A.age di System.out.println (" }} class a {public int age = 0; }Hasil operasi adalah sebagai berikut:
Usia = 20 dalam metode test1, usia = 20 dalam metode utama
4: Memahami proses lulus dengan referensi - Diagram Alokasi Memori
Untuk memahami proses lulus dengan benar, Anda harus belajar memahami proses alokasi memori, dan diagram alokasi memori dapat membantu kami memahami proses ini.
Gunakan contoh di atas untuk menganalisis:
(1): Mulai berjalan, jalankan baris 8, buat instance a, dan diagram alokasi memori adalah sebagai berikut:
(2): Jalankan baris 9, ubah nilai usia dalam contoh A. Diagram alokasi memori setelah berjalan adalah sebagai berikut:
(3): Jalankan baris 10, yaitu untuk melewati alamat ruang memori yang dirujuk oleh variabel A dalam metode utama ke variabel A dalam metode test1 sesuai dengan referensi. Harap dicatat: Kedua variabel ini benar -benar berbeda, jangan tertipu dengan nama yang sama.
Alokasi memori adalah sebagai berikut:
Karena dilewati dengan referensi, yaitu alamat ruang memori dilewati, diagram memori baru yang dibentuk setelah transfer selesai adalah sebagai berikut:
Dengan kata lain: kedua variabel menunjuk ke ruang yang sama.
(4): Jalankan baris 3 dan tetapkan nilai ke usia instance yang ditunjuk oleh variabel A dalam metode test1. Diagram memori baru yang dibentuk setelah selesai adalah sebagai berikut:
Pada saat ini, perubahan nilai usia instance A disebabkan oleh metode test1
(5): Jalankan baris 4, dan menurut diagram memori saat ini, usia output = 20 dalam metode test1
(6): Jalankan baris 11, dan menurut diagram memori saat ini, usia output = 20 dalam metode utama
5: Perubahan pada contoh di atas
Setelah memahami contoh di atas, beberapa orang mungkin bertanya, dapatkah nilai -nilai yang dilewati dengan referensi tidak saling mempengaruhi? Apa modifikasi dalam metode test1 yang tidak mempengaruhi metode utama?
Metode ini adalah hanya menggunakan instance baru dalam metode test1. Ubah ke contoh berikut, di mana perilaku ketiga baru ditambahkan:
kelas publik Temptest {private void test1 (a) {a = baru a (); // baris baru A.age = 20; System.out.println ("Metode test1 usia ="+A.Age); } public static void main (string [] args) {Temptest t = new Temptest (); A = a a () baru; A.Age = 10; t.test1 (a); System.out.println ("Metode Utama Usia ="+A.age); }} class a {public int age = 0; }Hasil berjalan adalah:
Umur = 20 dalam metode test1 usia = 10 dalam metode utama
Mengapa hasil dari menjalankan ini berbeda dari contoh sebelumnya? Lebih baik menggunakan diagram memori untuk memahaminya.
6: Memahami dengan referensi lagi
(1): Mulai berjalan, jalankan baris 9, buat instance dari A, dan diagram alokasi memori adalah sebagai berikut:
(2): Jalankan baris 10 adalah untuk memodifikasi nilai usia dalam contoh A. Diagram alokasi memori setelah berjalan adalah sebagai berikut:
(3): Jalur berjalan 11 adalah untuk melewati alamat ruang memori yang dirujuk oleh variabel A dalam metode utama ke metode variabel A dalam test1 sesuai dengan referensi. Harap dicatat: Kedua variabel ini benar -benar berbeda, jangan tertipu dengan nama yang sama.
Alokasi memori adalah sebagai berikut:
Karena dilewati dengan referensi, yaitu alamat ruang memori dilewati, diagram memori baru yang dibentuk setelah transfer selesai adalah sebagai berikut:
Dengan kata lain: kedua variabel menunjuk ke ruang yang sama.
(4): Jalankan baris 3 dan meregenerasi instance baru dari A untuk variabel A dalam metode test1. Diagram memori baru yang dibentuk setelah selesai adalah sebagai berikut:
(5): Jalankan baris 4 untuk menetapkan nilai ke usia instance baru yang ditunjuk oleh variabel A dalam metode test1. Diagram memori baru yang dibentuk setelah selesai adalah sebagai berikut:
Catatan: Pada saat ini, usia variabel A dalam metode test1 diubah, sedangkan metode utama tidak berubah.
(6): Jalankan baris 5, dan menurut diagram memori saat ini, usia output = 20 dalam metode test1
(7): Jalankan baris 12, dan menurut diagram memori saat ini, usia output = 10 dalam metode utama sesuai dengan diagram memori output = 10
7: Penjelasan
(1): "Dalam Java, passing parameter dilewatkan oleh nilai" berarti: melewati nilai adalah salinan dari nilai yang dilewati. Lulus dengan referensi sebenarnya melewati nilai alamat referensi, sehingga secara kolektif disebut lewat berdasarkan nilai.
(2): Di Java, hanya tipe dan string dasar sesuai dengan metode definisi berikut yang dilewati oleh nilai, dan yang lainnya dilewatkan sebagai referensi. Ini untuk secara langsung mendefinisikan string menggunakan kutipan ganda: string str = "Java Private School";
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.