Ketika suatu objek dilewatkan sebagai parameter ke suatu metode, metode ini dapat mengubah sifat objek dan mengembalikan hasil yang diubah. Jadi apakah itu nilai pass atau lulus referensi di sini?
Jawaban: Ini adalah transfer nilai. Bahasa pemrograman Java hanya melewati parameter dengan nilai. Ketika instance objek diteruskan ke dalam metode sebagai parameter, nilai parameter adalah salinan referensi objek. Menunjuk ke objek yang sama, konten objek dapat diubah dalam metode yang dipanggil, tetapi referensi objek (bukan salinan referensi) tidak akan pernah berubah.
Parameter Java, apakah mereka tipe primitif atau tipe referensi, lulus semua salinan (ada pepatah lain adalah untuk memberikan nilai, tetapi lebih baik untuk memahami bahwa salinan yang lewat, dan nilai yang lewat biasanya relatif terhadap alamat yang lewat).
Jika tipe parameter adalah tipe primitif, maka lulus adalah salinan parameter ini, yaitu, nilai parameter asli, yang sama dengan nilai yang dilewatkan sebelumnya. Jika nilai salinan diubah dalam fungsi, nilai asli tidak akan diubah.
Jika jenis parameter adalah jenis referensi, maka salinan parameter referensi ini dilewatkan, dan salinan ini menyimpan alamat parameter. Jika alamat salinan ini tidak diubah dalam fungsi, tetapi nilai dalam alamat diubah, maka perubahan dalam fungsi akan mempengaruhi parameter yang dilewati. Jika alamat salinan diubah dalam fungsi, seperti yang baru, maka salinannya menunjuk ke alamat baru. Pada saat ini, parameter yang masuk masih menunjuk ke alamat asli, sehingga nilai parameter tidak akan diubah.
contoh:
kelas publik paramtest {public static void main (string [] args) { / ** * test 1: Metode tidak dapat memodifikasi parameter numerik * / system.out.println ("Pengujian triplevalue:"); Persen ganda = 10; System.out.println ("Sebelum: persen =" + persen); triplevalue (persen); System.out.println ("Setelah: persen =" + persen); /** * Tes 2: Metode dapat mengubah keadaan parameter objek */System.out.println ("/nTesting triplesalary:"); Karyawan Harry = karyawan baru ("Harry", 50000); System.out.println ("Sebelum: Gaji =" + Harry.GetSalary ()); Triplesalary (Harry); System.out.println ("After: Salary =" + Harry.GetSalary ()); /** * Tes 3: Metode tidak dapat melampirkan objek baru ke parameter objek */System.out.println ("/nTesting swap:"); Karyawan A = Karyawan Baru ("Alice", 70000); Karyawan B = Karyawan Baru ("Bob", 60000); System.out.println ("Sebelum: a =" + a.getName ()); System.out.println ("Sebelum: b =" + b.getName ()); swap (a, b); System.out.println ("After: a =" + a.getName ()); System.out.println ("After: B =" + B.GetName ()); } swap void private static (karyawan x, karyawan y) {karyawan temp = x; x = y; y = temp; System.out.println ("Akhir metode: x =" + x.getName ()); System.out.println ("Akhir metode: y =" + y.getName ()); } private static void triplesalary (karyawan X) {x.raiseSalary (200); System.out.println ("Akhir metode: gaji =" + x.getSalary ()); } private static void triplevalue (double x) {x = 3*x; System.out.println ("Akhir metode x ="+x); }}Menunjukkan hasil:
Pengujian Triplevalue: Sebelum: Persen = 10.0end Metode X = 30.0 setelah: Persen = 10.0 Mengembalikan Triplesalary: Sebelum: Gaji = 50000.0end Metode: Gaji = 150000.0 Setelah: Gaji = 150000.0 Pertukaran SWAP: Sebelum: A = AliceBefore: B = Bobir Metode: x Metode: X. y = aliceafter: a = alice // referensi itu sendiri tidak ditukar setelah: b = bob
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.