Rumah > pembangunan bahagian belakang > C++ > Adakah Parameter Java Lulus Benar-Benar Mengikut Nilai, atau adakah ia Lebih Bernuansa?

Adakah Parameter Java Lulus Benar-Benar Mengikut Nilai, atau adakah ia Lebih Bernuansa?

Susan Sarandon
Lepaskan: 2025-01-02 22:04:40
asal
605 orang telah melayarinya

Is Java's Parameter Passing Truly Pass-by-Value, or is it More Nuanced?

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"; }
Salin selepas log masuk

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:

  • Rujukan Eksplisit: Gunakan kelas pembalut rujukan seperti AtomicReference, 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"); }
Salin selepas log masuk
  • Kaedah Getter/Setter: Sebagai amalan umum, adalah disyorkan untuk menggunakan kaedah getter dan setter untuk mengubah suai objek hartanah dan bukannya直接修改引用. Ini memastikan enkapsulasi dan ketepatan.

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan