Rumah >Java >javaTutorial >Mari analisa sama ada Java diluluskan dengan nilai atau rujukan.
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.
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.
Ia boleh dilihat bahawa perbezaan antara lulus nilai dan lulus rujukan ialah sama ada pengubahsuaian parameter formal akan mempengaruhi parameter sebenar
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);}
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);}
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:
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
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.
Pembelajaran yang disyorkan: "
tutorial video javaAtas 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!