Rumah> Java> javaTutorial> teks badan

Adakah parameter lulus dalam Java berdasarkan nilai atau rujukan?

王林
Lepaskan: 2024-01-30 09:09:15
asal
1224 orang telah melayarinya

Adakah parameter lulus dalam Java berdasarkan nilai atau rujukan?

Adakah kaedah lulus parameter dalam Java diluluskan mengikut nilai atau rujukan?

Di Java, parameter dihantar mengikut nilai atau rujukan, bergantung pada jenis parameter.

  1. Pass by Value
    Pass by Value merujuk kepada menghantar salinan parameter sebenar kepada parameter formal kaedah apabila kaedah dipanggil. Menukar nilai parameter formal dalam kaedah tidak menjejaskan nilai parameter sebenar.

Kod sampel adalah seperti berikut:

public class PassByValueExample { public static void main(String[] args) { int number = 10; modifyValue(number); System.out.println("Number after method call: " + number); } public static void modifyValue(int value) { value = 20; System.out.println("Value inside method: " + value); } }
Salin selepas log masuk

Hasil output adalah seperti berikut:

Value inside method: 20 Number after method call: 10
Salin selepas log masuk

Dalam kod di atas, kaedahmodifyValuemenerima parameter jenis integervalue. Di dalam kaedah, tukar nilai valuekepada 20, dan kemudian cetaknya. Walau bagaimanapun, apabila mencetak nilainombordalam kaedahutama, didapati bahawanombormasih 10, menunjukkan bahawa menukar nilai parameter formal tidak akan menjejaskan nilai sebenar parameter.modifyValue方法接受一个整数类型的参数value。在方法内部,将value的值改为20,然后打印出来。但是,在main方法中打印number的值时,发现number仍然是10,说明改变形式参数的值并不会影响实际参数的值。

  1. 引用传递(Pass by Reference)
    引用传递是指在方法调用时,实际参数的引用(内存地址)被传递给方法的形式参数。在方法中对形式参数所指向的对象进行修改,会改变实际参数所引用的对象的状态。

示例代码如下:

public class PassByReferenceExample { public static void main(String[] args) { StringBuilder name = new StringBuilder("Alice"); modifyName(name); System.out.println("Name after method call: " + name); } public static void modifyName(StringBuilder builder) { builder.append(" Smith"); System.out.println("Name inside method: " + builder); } }
Salin selepas log masuk

输出结果如下:

Name inside method: Alice Smith Name after method call: Alice Smith
Salin selepas log masuk

在上述代码中,modifyName方法接受一个StringBuilder类型的参数builder。在方法内部,将builder所指向的对象追加了" Smith",然后打印出来。在main方法中打印name时,发现name变成了"Alice Smith",说明改变形式参数的值会影响实际参数所引用的对象的状态。

需要注意的是,虽然Java中存在引用传递的情况,但是Java并没有提供直接通过引用改变实际参数值的方式。比如,不能通过在方法中给形式参数分配新的内存地址来改变实际参数的引用。

总结起来,Java中的参数传递方式是根据参数的类型来决定的。对于基本数据类型(如intchar

    Lulus melalui RujukanLulus melalui rujukan bermakna apabila kaedah dipanggil, rujukan (alamat memori) parameter sebenar dihantar kepada parameter formal kaedah tersebut. Mengubah suai objek yang ditunjuk oleh parameter formal dalam kaedah akan mengubah keadaan objek yang dirujuk oleh parameter sebenar. Kod sampel adalah seperti berikut: rrreeeHasil output adalah seperti berikut: rrreeeDalam kod di atas, kaedah modifyNamemenerima parameter jenis StringBuilder builder code>. Di dalam kaedah, "Smith" dilampirkan pada objek yang ditunjuk oleh builderdan kemudian dicetak. Apabila mencetak namedalam kaedah utama, didapati bahawa nameditukar kepada "Alice Smith", menunjukkan bahawa menukar nilai parameter formal akan menjejaskan parameter sebenar Keadaan objek yang dirujuk. Perlu diingatkan bahawa walaupun terdapat hantaran rujukan di Jawa, Java tidak menyediakan cara untuk menukar nilai parameter sebenar secara langsung melalui rujukan. Sebagai contoh, anda tidak boleh menukar rujukan parameter sebenar dengan memberikan alamat memori baharu kepada parameter rasmi dalam kaedah tersebut. Ringkasnya, kaedah lulus parameter dalam Java ditentukan berdasarkan jenis parameter. Untuk jenis data asas (seperti int, char, dll.), pass by value untuk jenis objek, pass by reference. Lulus mengikut nilai hanya beroperasi pada salinan parameter sebenar, manakala lulus melalui rujukan beroperasi pada objek yang dirujuk oleh parameter sebenar.

Atas ialah kandungan terperinci Adakah parameter lulus dalam Java berdasarkan nilai atau rujukan?. 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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!