Melalui Parameter melalui Rujukan dalam Java: Adakah Mungkin?
Walaupun Java tidak mempunyai kata kunci rujukan eksplisit seperti C#, adalah penting untuk memahami bahawa parameter sentiasa diluluskan oleh nilai. Walau bagaimanapun, apabila melepasi parameter jenis rujukan (cth., objek), rujukan kepada objek itu sendiri dihantar, meniru gelagat rujukan lalu-selalu dengan berkesan.
Lalu-lalu -Nilai lwn. Rujukan Laluan Jelas:
Pertimbangkan perkara berikut kod:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; }
Kod ini akan mencetak "Hello" pada konsol, menunjukkan bahawa nilai rujukan objek kekal tidak berubah. Ini kerana Java menghantar jenis primitif dan rujukan kepada objek mengikut nilai.
Mencapai Semantik Pass-by-Reference:
Untuk benar-benar lulus objek melalui rujukan, membenarkan pengubahsuaian dalam kaedah yang akan ditunjukkan dalam kod panggilan, anda perlu menggunakan rujukan eksplisit, seperti yang ditunjukkan di bawah:
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); // Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Kod ini akan mencetak "Selamat tinggal" ke konsol, menunjukkan bahawa rujukan itu sendiri telah diubah suai dan perubahan telah disebarkan kembali kepada kod panggilan.
Kesimpulan :
Java sememangnya tidak menyokong rujukan lulus untuk parameter. Walau bagaimanapun, dengan menggunakan rujukan dan binaan eksplisit seperti AtomicReference, anda boleh mencapai semantik yang serupa dan mengubah suai objek asas dengan rujukan, meniru tingkah laku lulus demi rujukan dengan berkesan.
Atas ialah kandungan terperinci Adakah Java Menyokong Pass-by-Reference, dan Jika Tidak, Bagaimana Ia Boleh Disimulasikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!