Rumah >pembangunan bahagian belakang >C++ >Adakah Parameter Lulus Java mengikut Rujukan atau Mengikut Nilai?
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!