Rumah >pembangunan bahagian belakang >C++ >Adakah Java Lulus Parameter mengikut Rujukan atau Nilai, dan Bagaimana Anda Boleh Mencapai Tingkah Laku Seperti Rujukan?

Adakah Java Lulus Parameter mengikut Rujukan atau Nilai, dan Bagaimana Anda Boleh Mencapai Tingkah Laku Seperti Rujukan?

DDD
DDDasal
2024-12-29 18:44:141037semak imbas

Does Java Pass Parameters by Reference or by Value, and How Can You Achieve Reference-Like Behavior?

Melalui Parameter melalui Rujukan dalam Java: Penjelasan

Bertentangan dengan kepercayaan popular, Java tidak menyokong parameter lulus melalui rujukan dengan cara yang sama sebagai kata kunci ref C#. Walau bagaimanapun, persepsi ini berpunca daripada fakta bahawa untuk parameter jenis rujukan, rujukan itu sendiri diluluskan mengikut nilai.

Di Java, semua parameter diluluskan mengikut nilai. Apabila parameter jenis rujukan dihantar kepada kaedah, salinan rujukan dibuat. Ini bermakna perubahan yang dibuat pada rujukan dalam kaedah tidak menjejaskan rujukan di luar kaedah.

Untuk menggambarkan ini, pertimbangkan contoh berikut:

Object o = "Hello";
mutate(o);
System.out.println(o); //Hello

private void mutate(Object o) { o = "Goodbye"; }

Kod di atas akan mencetak " Hello" kepada konsol. Ini menunjukkan bahawa rujukan o di dalam kaedah mutate tidak sama dengan rujukan di luar kaedah.

Jika anda ingin mengubah suai rujukan itu sendiri, anda mesti gunakan parameter jenis rujukan eksplisit, seperti java.util.concurrent.atomic.AtomicReference. Berikut ialah contoh:

AtomicReference<Object> ref = new AtomicReference<Object>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

Dalam kes ini, parameter ref diluluskan melalui rujukan dan nilai rujukan diubah suai dalam kaedah mutasi. Akibatnya, kod akan mencetak "Selamat tinggal!" ke konsol.

Atas ialah kandungan terperinci Adakah Java Lulus Parameter mengikut Rujukan atau Nilai, dan Bagaimana Anda Boleh Mencapai Tingkah Laku Seperti Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn