Analisa perbezaan antara hantaran nilai dan hantaran rujukan dalam Java untuk membantu anda lebih memahami pengaturcaraan Java Contoh kod khusus diperlukan
Dalam pengaturcaraan Java, hantaran parameter dibahagikan kepada dua kaedah: hantaran nilai dan hantaran rujukan. Memahami perbezaan antara kedua-dua kaedah penghantaran ini adalah sangat penting untuk pemahaman yang mendalam tentang pengurusan memori Java dan mekanisme panggilan kaedah.
Pass by Value bermakna salinan parameter sebenar diluluskan, bukan parameter sebenar itu sendiri. Apabila kaedah dipanggil, nilai parameter sebenar disalin ke dalam pembolehubah baharu dan kemudian dihantar ke kaedah.
Pass by Rujukan bermaksud rujukan (alamat) parameter sebenar diluluskan dan bukannya nilai parameter sebenar. Apabila kaedah dipanggil, rujukan kepada parameter sebenar dihantar kepada kaedah. Oleh itu, kaedah boleh mengubah nilai parameter sebenar dengan rujukan.
Yang berikut menggunakan contoh kod khusus untuk menunjukkan perbezaan antara pemindahan nilai dan pemindahan rujukan.
public class PassByValueExample { public static void main(String[] args) { int number = 5; System.out.println("Before changeValue method, number = " + number); changeValue(number); System.out.println("After changeValue method, number = " + number); } public static void changeValue(int num) { num = 10; System.out.println("Inside changeValue method, num = " + num); } }
Dalam contoh kod di atas, kami menentukan pembolehubah integer utama
dan menetapkan nilai awalnya kepada 5. Kemudian, kami memanggil kaedah changeValue
dan menyerahkan nombor
sebagai parameter sebenar kepada kaedah tersebut. main
方法中定义了一个整型变量number
,并将其初始值设为5。然后,我们调用了changeValue
方法,并将number
作为实际参数传递给该方法。
changeValue
方法内部,我们将形参num
的值设置为10。然后,我们打印出num
的值。
运行代码,我们会发现输出结果为:
Before changeValue method, number = 5 Inside changeValue method, num = 10 After changeValue method, number = 5
可以看到,在changeValue
方法内部修改了形参num
的值,但是对实际参数number
并没有任何影响。这是因为值传递方式传递的是实际参数的副本,对副本的修改不会影响到实际参数本身。
接下来,我们再来看一个引用传递的示例代码。
public class PassByReferenceExample { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); System.out.println("Before changeValue method, sb = " + sb); changeValue(sb); System.out.println("After changeValue method, sb = " + sb); } public static void changeValue(StringBuilder builder) { builder.append(" World"); System.out.println("Inside changeValue method, builder = " + builder); } }
以上代码示例中,我们在main
方法中定义了一个StringBuilder
对象sb
,并将其初始值设为"Hello"。然后,我们调用了changeValue
方法,并将sb
作为实际参数传递给该方法。
changeValue
方法内部,我们通过builder.append
方法追加了字符串" World"。然后,我们打印出builder
的值。
运行代码,我们会发现输出结果为:
Before changeValue method, sb = Hello Inside changeValue method, builder = Hello World After changeValue method, sb = Hello World
可以看到,通过引用传递方式传递的是对象的引用(地址),对引用的操作会直接影响到对象本身。因此,在changeValue
方法内部对builder
对象进行追加字符串操作后,实际参数sb
changeValue
, kami menetapkan nilai parameter formal num
kepada 10. Kemudian, kami mencetak nilai num
. Jalankan kod, kita akan dapati bahawa hasil output ialah: 🎜rrreee🎜Anda boleh melihat bahawa nilai parameter formal num
diubah suai dalam kaedah changeValue
, tetapi parameter sebenar number tidak mempunyai kesan. Ini kerana kaedah lulus nilai memindahkan salinan parameter sebenar, dan pengubahsuaian kepada salinan tidak akan menjejaskan parameter sebenar itu sendiri. 🎜🎜Seterusnya, mari lihat contoh kod untuk rujukan lulus. 🎜rrreee🎜Dalam contoh kod di atas, kami menentukan objek StringBuilder
sb
dalam kaedah main
dan menetapkan nilai awalnya kepada "Hello ". Kemudian, kami memanggil kaedah changeValue
dan menyerahkan sb
sebagai parameter sebenar kepada kaedah tersebut. 🎜🎜Di dalam kaedah changeValue
, kami menambahkan rentetan "World" melalui kaedah builder.append
. Kemudian, kami mencetak nilai builder
. 🎜🎜Jalankan kod, dan kita akan dapati bahawa outputnya ialah: 🎜rrreee🎜Anda boleh melihat bahawa apa yang dilalui melalui rujukan lulus ialah rujukan (alamat) objek, dan operasi pada rujukan akan mempengaruhi objek itu sendiri. Oleh itu, selepas menambahkan rentetan pada objek builder
dalam kaedah changeValue
, kandungan parameter sebenar sb
juga telah berubah. 🎜🎜Melalui kod contoh di atas, kita dapat memahami dengan jelas perbezaan antara hantaran nilai dan hantaran rujukan dalam Java. Sangat penting untuk memahami panggilan kaedah dan pengurusan memori. Dalam proses pengaturcaraan sebenar, kita perlu memilih kaedah pemindahan yang sesuai untuk memproses parameter mengikut keperluan dan situasi tertentu. 🎜Atas ialah kandungan terperinci Perbincangan mendalam tentang perbezaan antara lulus nilai dan hantaran rujukan dalam pengaturcaraan Java untuk membantu anda memahami dengan lebih baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!