


Mari kita bincangkan tentang penghantaran parameter rentetan dan tatasusunan dalam JAVA
Artikel ini membawa anda pengetahuan yang berkaitan tentang java, yang terutamanya memperkenalkan isu yang berkaitan dengan penghantaran parameter rentetan dan tatasusunan java Mari kita lihat mengapa java hanya Melepasi nilai, harap ia membantu semua orang.
Kajian yang disyorkan: "Tutorial pembelajaran java"
Perkara pertama yang perlu dijelaskan ialah hanya terdapat nilai lulus dalam java ! Hanya nilai yang diluluskan! Asas teori berasal dari "think in java". Langkah seterusnya adalah untuk menerangkan secara terperinci mengapa java hanya melalui nilai.
Oleh kerana terdapat dua jenis data dalam Java: jenis asas dan jenis rujukan, ditambah dengan String jenis khas, ia boleh dijelaskan terutamanya dari tiga aspek.
1. Jenis data asas
Lihat kod dahulu
public class Demo01 { public void change(int a) { System.out.println("副本a 的初始值" + a); a = 20; System.out.println("副本a 的新值值" + a); } public static void main(String[] args) { int a = 10; Demo01 d = new Demo01(); d.change(a); System.out.println("change方法执行后的值" + a); } }
Analisis:
Dalam java, jenis data asas mengikuti pemindahan nilai, jadi objek d Apabila memanggil kaedah change(), hanya salinan data asal a dihantar ke parameter dalam kaedah Pada kali pertama, nilai asal dan salinan a ialah 10. Selepas dilaksanakan a=20, nilai salinan a menjadi 20.
Jadi keputusan larian ialah:
Untuk prinsipnya, sila rujuk rajah di bawah
2. Jenis data rujukan
Lihat kod dahulu
public class Demo02 { char[] ch = {'a', 'b', 'c'}; public void change(char ch[]) { System.out.println("方法中ch[0]的初始值:" + ch[0]); ch[0] = 'g'; System.out.println("方法中ch[0]执行后的新值:" + ch[0]); } public static void main(String[] args) { Demo02 d = new Demo02(); System.out.println("对象d中数组的初始值是:"+d.ch); d.change(d.ch); System.out.println("对象d中数组的最终值是:"+d.ch); } }
Analisis:
Apabila jenis rujukan diluluskan sebagai parameter, ia juga merupakan nilai pemindahan Pada masa ini, salinan nilai alamat dihantar, tetapi Kedua-dua alamat menghala ke tempat yang sama. Apabila alamat salinan tidak ditukar, operasi pada data yang ditunjukkan oleh alamat salinan akan menjejaskan nilai data asal. Tatasusunan ch[] dalam kaedah dan tatasusunan ch[] asal menghala ke data yang sama, jadi pada peringkat awal ch[0] menunjuk kepada 'a' kemudian nilai baharu diberikan kepada ch[0] dalam salinan menjadi 'g'.
Jadi hasil larian ialah:
Untuk prinsipnya, sila rujuk rajah di bawah
3 . Parameter rentetan melepasi
Lihat kod dahulu
public class Demo03 { public void change(String str2) { System.out.println("方法中str2初始值" + str2); System.out.println("方法中str2初始hashcode值" + str2.hashCode()); str2 = "bbb"; System.out.println("方法中str2赋值后:" + str2); System.out.println("方法中str2赋值后hashcode值:" + str2.hashCode()); } public static void main(String[] args) { String str1 = new String("aaa"); System.out.println("原始字符串str1的hashcode值:" + str1.hashCode()); Demo03 d = new Demo03(); d.change(str1); System.out.println("方法调用后str1的值" + str1); } }
Analisis:
Rentetan ialah jenis data khas Lapisan bawahnya ialah tatasusunan char[] terakhir, yang tidak boleh diubah , jadi apabila rentetan diluluskan sebagai parameter, ia boleh dikendalikan sebagai tatasusunan khas Begitu juga, ia juga menyalin salinan rujukan objek asal pada salinan itu objek dan rujukan objek asal kedua-duanya menunjuk kepada aksara asal Kedudukan rentetan, iaitu, alamat yang ditunjuk oleh str2 apabila ia mula-mula dimulakan adalah konsisten dengan kedudukan yang ditunjukkan oleh objek asal str1, iaitu, nilai kod cincang awal str2 adalah sama dengan nilai kod cincang objek asal str1 Selepas operasi str2 = "bbb", Disebabkan oleh kebolehubahan rentetan, str2 akan menunjuk ke rujukan objek baharu pada masa ini, iaitu. , str2 akan menunjuk ke lokasi "bbb" pada masa ini. Nilai kod cincang str2 akan berubah, tetapi rujukan objek asal str1 tidak berubah, dan "aaa" tidak berubah, jadi str1 masih menunjuk kepada "aaa". Keputusan yang dijalankan adalah seperti berikut:
Mari kita lihat contoh rentetan yang lebih spesifik:
public class Demo04 { public static void main(String[] args) { StringBuffer s = new StringBuffer("hello"); StringBuffer s2 = new StringBuffer("hi"); test(s, s2); System.out.println("方法調用后s的值:" + s); System.out.println("方法調用后s2的值:" + s2); } static void test(StringBuffer s3, StringBuffer s4) { System.out.println("方法初始化時s3的值" + s3); System.out.println("方法初始化時s4的值" + s4); s4 = s3; s3 = new StringBuffer("new"); System.out.println("第一步变化后s3的值" + s3); System.out.println("第一步变化后s4的值" + s4); s3.append("boy"); s4.append("gril"); System.out.println("第二步变化后s3的值" + s3); System.out.println("第二步变化后s4的值" + s4); } }
Kali ini mari kita lihat hasilnya pertama:
Kemudian analisis:
Sebelum kaedah dilaksanakan, lokasi yang ditunjukkan oleh rentetan s1 dan s2 masing-masing ialah "hello" dan "hai". tanpa keraguan,
(1) Kemudian masukkan kaedah Parameter s3 dan s4 dalam kaedah dimulakan sama seperti contoh di atas Pada masa ini, ia menunjukkan kedudukan yang sama seperti yang diberikan oleh s1s2 salinan rujukan objek kepada s3s4 Pada masa ini, s3s4 Nilai-nilainya ialah "hello" dan "hi"
(2) Kemudian laksanakan s4=s3 s3 hingga s4. Pada masa ini, s4 ialah "hello"; s3=new StringBuffer ( "baru"); ", jadi pada masa ini s3 = "baru", s4 = "hello"
(3) Kemudian s3.append("boy");s4.append("gril"); Sila ambil perhatian bahawa lampiran kaedah dalam StringBuffer tidak menunjuk kepada rujukan objek baharu untuk s3s4 Operasi berdasarkan asal, jadi selepas operasi, s3 = "newboy", s4 = "hellogril"
(4) Pada ketika ini, panggilan kaedah telah selesai Mari kita kembali dan semak kesan s3s4 pada s1s2 dalam proses.
——- A. Mula-mula, s3 mula menunjuk kepada "hello" seperti s1, dan kemudian mencipta rujukan objek baharu "baru" untuk s3 Pada masa ini, s3 dan s1 tidak lagi mempunyai hubungan setengah sen. dan s3 melakukan append ( boy), s3 = "newboy";
——– B. s4 dan s2 kedua-duanya menunjuk kepada "hai" pada permulaan, dan kemudian s3 memberikan nilai awalnya (iaitu, salinan s1 ) ke s4, pada masa itu s4 menunjuk kepada "hello" (ini akan mewujudkan hubungan antara s4 dan s1), s4 melakukan operasi tambah (grill), kerana ia dan s1 menghala ke lokasi yang sama, jadi objek yang mereka tunjuk secara bersama kepada akan berubah, s4=s1="hellogrill".
——- C. Kemudian menjadi jelas bahawa objek "hi" yang ditunjuk oleh s2 tidak berubah, dan "hello" yang ditunjuk oleh s1 telah menjadi "hellogril" di bawah operasi append ("grill").
4. Ringkasan
Apabila menggunakan jenis data asas sebagai parameter formal kaedah, pengubahsuaian kepada parameter formal dalam badan kaedah tidak akan menjejaskan nilai parameter sebenar
Apabila menggunakan jenis data rujukan sebagai parameter formal kaedah, jika kandungan data yang ditunjukkan oleh parameter formal diubah suai dalam badan kaedah, ia akan menjejaskan nilai pembolehubah parameter sebenar, kerana parameter formal Pembolehubah dan pembolehubah parameter sebenar berkongsi kawasan timbunan yang sama
Apabila menggunakan jenis data rujukan sebagai parameter formal kaedah, jika; penunjuk pembolehubah parameter formal diubah dalam badan kaedah, maka Ia tidak akan menjejaskan nilai pembolehubah parameter sebenar, jadi pembolehubah parameter formal dan pembolehubah parameter sebenar masing-masing menunjukkan kawasan timbunan yang berbeza; penerangan yang jelas.
Mengenai parameter rentetan, ia juga bergantung pada sama ada penunjuk pembolehubah parameternya telah berubah, kerana lapisan bawah Rentetan ialah jenis akhir char[], apabila anda menggunakan String s = " aaa" atau String s = new String("aaa"), rujukan objek baharu akan dibuat untuk s. Walau bagaimanapun, apabila kaedah append() dipanggil, ia tidak akan menunjuk ke objek baharu, tetapi akan menukar objek runcing asal dan rujukan objek yang dikongsi dengannya juga akan berubah.
Perkara terakhir yang diulang ialah tiada pemindahan rujukan dalam Java, hanya pemindahan nilai Jenis rujukan ialah pemindahan nilai khas (salinan alamatnya diberikan kepada parameter. tetapi ia berbeza daripada jenis data asas, jika objek yang ditunjukkan oleh alamat berubah, objek asal juga akan berubah kerana sebab perkongsian).
Kajian yang disyorkan: "tutorial java"
Atas ialah kandungan terperinci Mari kita bincangkan tentang penghantaran parameter rentetan dan tatasusunan dalam JAVA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Artikel ini menerangkan Java's Remote Method Invocation (RMI) untuk membina aplikasi yang diedarkan. IT memperincikan definisi antara muka, pelaksanaan, persediaan pendaftaran, dan penyerahan klien, menangani cabaran seperti isu rangkaian dan keselamatan.

Artikel ini memperincikan API soket Java untuk komunikasi rangkaian, yang meliputi persediaan pelanggan-pelayan, pengendalian data, dan pertimbangan penting seperti pengurusan sumber, pengendalian ralat, dan keselamatan. Ia juga meneroka teknik pengoptimuman prestasi, i

Butiran artikel ini mewujudkan protokol rangkaian Java tersuai. Ia meliputi definisi protokol (struktur data, pembingkaian, pengendalian ralat, versi), pelaksanaan (menggunakan soket), serialisasi data, dan amalan terbaik (kecekapan, keselamatan, mainta


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular