Rumah >pembangunan bahagian belakang >C++ >Adakah Java Pass-by-Value atau Pass-by-Reference?
Dalam Java, semua parameter diluluskan mengikut nilai, termasuk jenis rujukan. Ini bermakna bahawa nilai sebenar rujukan, bukan rujukan itu sendiri, diserahkan kepada kaedah. Perkara ini boleh mengelirukan kerana nampaknya rujukan diluluskan melalui rujukan kerana sebarang perubahan yang dibuat pada objek yang dirujuk oleh parameter akan ditunjukkan dalam objek asal.
Walau bagaimanapun, ini bukan tingkah laku lulus demi rujukan yang benar . Contoh berikut menunjukkan ini:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!
Selepas melaksanakan kod ini, output akan menjadi "Hello." Ini kerana kaedah mutasi menerima salinan rujukan kepada objek asal, bukan objek asal itu sendiri. Apabila baris o = "Selamat tinggal" dilaksanakan, ia menukar pembolehubah rujukan o di dalam kaedah mutasi, tetapi tidak menjejaskan pembolehubah o asal di luar kaedah.
Untuk mencapai gelagat lulus demi rujukan yang benar, satu pilihan ialah menggunakan rujukan eksplisit seperti berikut:
AtomicReference<Object> ref = new AtomicReference<>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Dalam kes ini, pembalut AtomicReference memegang rujukan kepada objek asal. Apabila kaedah mutasi menerima parameter ref, ia mempunyai akses terus kepada objek asal dan sebarang perubahan yang dibuat pada objek akan ditunjukkan dalam objek asal di luar kaedah.
Atas ialah kandungan terperinci Adakah Java Pass-by-Value atau Pass-by-Reference?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!