Java Parameter Passing: Nilai vs. Rujukan
Di Java, parameter lulus semantik berbeza daripada bahasa seperti C#, di mana kata kunci "ref" secara eksplisit menunjukkan lulus rujukan.
Rujukan Sekeliling Kekeliruan Melepasi
Sifat "pass-by-value" Java mengelirukan pembangun kerana parameter jenis rujukan (seperti objek) sebenarnya diluluskan melalui rujukan. Walau bagaimanapun, "rujukan" ini hanyalah lokasi memori objek, bukan objek itu sendiri.
Demonstrasi Pelulusan Nilai
Pertimbangkan coretan kod berikut:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; }
Kod ini akan mencetak "Hello" ke konsol kerana parameter "o" dalam kaedah mutasi sebenarnya merujuk kepada salinan rujukan asal. Menetapkan nilai baharu pada salinan ini tidak mempunyai kesan pada nilai objek asal.
Pilihan Alternatif untuk Pengubahsuaian Rujukan
Untuk mengubah suai objek asal, terdapat dua pilihan:
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); // Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Atas ialah kandungan terperinci Adakah Parameter Java Lulus Benar-Benar Mengikut Nilai, atau adakah ia Lebih Bernuansa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!