Rumah >pembangunan bahagian belakang >C++ >Adakah Parameter Lulus Java mengikut Rujukan atau Mengikut Nilai?

Adakah Parameter Lulus Java mengikut Rujukan atau Mengikut Nilai?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-30 14:45:16447semak imbas

Does Java Pass Parameters by Reference or by Value?

Melalui Parameter melalui Rujukan dalam Java

Di Java, setiap parameter diluluskan mengikut nilai, yang mungkin kelihatan berlawanan dengan intuitif, terutamanya jika anda datang daripada bahasa seperti C# yang menyokong rujukan lulus. Walau bagaimanapun, semantiknya sedikit berbeza di bawah tudung.

Cara Java Mengendalikan Jenis Rujukan

Untuk parameter jenis rujukan (seperti objek), Java melepasi rujukan sendiri dengan nilai. Oleh itu, ia kelihatan seperti rujukan lulus, kerana tugasan dalam kaedah mempengaruhi rujukan di luar kaedah.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa rujukan yang diluluskan tidak sama dengan rujukan yang digunakan dalam kaedah panggilan.

Bukti Pass-by-Value

Pertimbangkan perkara berikut contoh:

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

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

Kod ini mencetak "Hello" ke konsol, walaupun kaedah mutate() cuba mengubah suai rujukan o kepada "Selamat tinggal." Ini menunjukkan bahawa rujukan yang diluluskan kepada mutate() tidak sama dengan rujukan o asal, menyokong semantik nilai pas-demi.

Pilihan untuk Lulus Rujukan Benar

Untuk mencapai tingkah laku lulus demi rujukan yang sebenar, anda boleh menggunakan pendekatan berikut:

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, AtomicReference menyediakan pembalut di sekeliling objek, dan rujukannya benar-benar diluluskan oleh nilai. Tugasan kepada rujukan dalam mutate() akan menjejaskan rujukan di luar kaedah, menghasilkan tingkah laku lulus demi rujukan yang diingini.

Atas ialah kandungan terperinci Adakah Parameter Lulus Java mengikut Rujukan atau Mengikut Nilai?. 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