Rumah  >  Artikel  >  Java  >  Adakah parameter lulus dalam Java berdasarkan nilai atau rujukan?

Adakah parameter lulus dalam Java berdasarkan nilai atau rujukan?

王林
王林asal
2024-01-30 09:09:151230semak imbas

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);
    }
}

Hasil output adalah seperti berikut:

Value inside method: 20
Number after method call: 10

Dalam kod di atas, kaedah modifyValue menerima parameter jenis integer value. Di dalam kaedah, tukar nilai value kepada 20, dan kemudian cetaknya. Walau bagaimanapun, apabila mencetak nilai nombor dalam kaedah utama, didapati bahawa nombor masih 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);
    }
}

输出结果如下:

Name inside method: Alice Smith
Name after method call: Alice Smith

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

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

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

    Lulus melalui Rujukan🎜Lulus 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: 🎜rrreee🎜Hasil output adalah seperti berikut: 🎜rrreee🎜Dalam kod di atas, kaedah modifyName menerima parameter jenis StringBuilder builder code>. Di dalam kaedah, "Smith" dilampirkan pada objek yang ditunjuk oleh <code>builder dan kemudian dicetak. Apabila mencetak name dalam kaedah utama, didapati bahawa name ditukar 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!

Kenyataan:
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