Rumah  >  Artikel  >  Java  >  Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.

Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.

WBOY
WBOYke hadapan
2022-05-12 18:40:221879semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang java Terutamanya ia memperkenalkan isu yang berkaitan tentang sama ada Java diluluskan melalui rujukan Mari kita lihat bersama-sama kepada semua orang.

Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.

Kajian yang disyorkan: "tutorial video java"

Tujuan artikel: Sahkan sama ada bahasa Java lulus nilai atau rujukan lulus dan prinsip Pelaksanaan Java bagi lulus parameter.


Pengenalan masalah:
Baca segmen kod dahulu:

public static void main(String[] args){
    Person p=new Person("张三");
    f(p);
    System.out.println("实参:"+p);}public static void f(Person p){
    p.name="李四";
    System.out.println("形参:"+p);}

Hasil berjalan:
Parameter formal: Person{name="李思"}
Parameter sebenar: Person{name="李思"}

Kami menghantar pembolehubah objek kepada kaedah , dan kemudian dalam kaedah Ubah suai sifat objek dan cetak parameter sebenar dan parameter formal Di permukaan, nilai parameter sebenar dan parameter formal telah diubah suai.Adakah Java juga menyokong pemindahan rujukan?


答案是:Java语言只支持值传递,不支持引用传递.

Sebelum mengesahkan kaedah lulus parameter Java, kita mesti terlebih dahulu memahami perbezaan antara hantaran nilai fungsi dan hantaran rujukan.

  • Pass mengikut nilai merujuk kepada apabila memanggil fungsi Lulus salinan parameter sebenar kepada fungsi, supaya jika parameter diubah suai dalam fungsi, parameter sebenar tidak akan terjejas.
  • Pas melalui rujukan merujuk kepada menghantar alamat parameter sebenar terus ke fungsi apabila memanggil fungsi Kemudian pengubahsuaian parameter dalam fungsi akan mempengaruhi parameter sebenar.

Ia boleh dilihat bahawa perbezaan antara lulus nilai dan lulus rujukan ialah sama ada pengubahsuaian parameter formal akan mempengaruhi parameter sebenar


1. Asas Parameter lulus jenis data

Kami menghantar jenis data asas kepada kaedah, dan kemudian mengubah suai nilai parameter formal dalam kaedah, dan mendapati bahawa pengubahsuaian parameter formal tidak menjejaskan parameter sebenar .

public static void main(String[] args){
    int a=1;
    f(p);
    System.out.println("实参:"+a);}public static void f(int a){
    a=2;
    System.out.println("形参:"+a);}

2. Lulus parameter jenis data rujukan

Dalam contoh yang diperkenalkan dalam soalan, nampaknya pengubahsuaian parameter formal mempengaruhi parameter sebenar, tetapi selagi kami mencipta objek baharu dan menetapkannya kepada parameter formal, ini Apabila mencetak parameter sebenar dan parameter formal, kedua-duanya tidak menjejaskan satu sama lain Ini bermakna Java tidak mematuhi hantaran rujukan.

public static void main(String[] args){
    Person p=new Person("张三");
    f(p);
    System.out.println("实参:"+p);}public static void f(Person p){
    p=new Person("李四");
    System.out.println("形参:"+p);}

3. Prinsip

Kita perlu faham Mengapa fenomena ini berlaku Anda mesti memahami prinsip asas di sebalik Java:

JVM dibahagikan kepada banyak blok? Kawasan. Objek yang kami cipta diletakkan dalam timbunan, dan jenis data asas dan pembolehubah setempat diletakkan dalam timbunan Apabila menghantar jenis data asas, salinan data dibuat dan dihantar ke kaedah parameter sebenar tidak akan terjejas oleh pengubahsuaian parameter formal, seperti yang ditunjukkan dalam rajah:

Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.
Memandangkan objek diletakkan di kawasan timbunan, kita hanya boleh menggunakan rujukan objek untuk mengendalikan objek.
Apabila rujukan objek dihantar kepada kaedah, salinan rujukan sebenarnya dibuat, menunjuk ke objek yang sama pada masa yang sama, melalui parameter formal Apabila merujuk objek operasi, ia nampaknya parameter sebenar telah berubah Sebenarnya, kandungan objek telah berubah, tetapi pembolehubah objek tidak berubah, dan parameter sebenar itu sendiri tidak berubah

Mari analisa sama ada Java diluluskan dengan nilai atau rujukan. Apabila kami menetapkan semula parameter formal, parameter sebenar tidak akan terjejas dalam apa-apa cara Pada masa ini, parameter sebenar dan parameter formal sudah menunjuk kepada dua objek berbeza.


Jadi, Java hanya menyokong penghantaran nilai.

Pembelajaran yang disyorkan: "

tutorial video java

"

Atas ialah kandungan terperinci Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam