Jadual Kandungan
1. Jenis data asas
2. Jenis data rujukan
3 . Parameter rentetan melepasi
4. Ringkasan
Rumah Java javaTutorial Mari kita bincangkan tentang penghantaran parameter rentetan dan tatasusunan dalam JAVA

Mari kita bincangkan tentang penghantaran parameter rentetan dan tatasusunan dalam JAVA

Mar 28, 2022 pm 12:05 PM
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.

Mari kita bincangkan tentang penghantaran parameter rentetan dan tatasusunan dalam JAVA

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);
    }
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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

    }
}
Salin selepas log masuk

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Bagaimana untuk menjalankan aplikasi boot musim bunga pertama anda di Spring Tool Suite? Bagaimana untuk menjalankan aplikasi boot musim bunga pertama anda di Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

Spring Boot memudahkan penciptaan aplikasi Java yang mantap, berskala, dan siap pengeluaran, merevolusi pembangunan Java. Pendekatan "Konvensyen Lebih Konfigurasi", yang wujud pada ekosistem musim bunga, meminimumkan persediaan manual, Allo

See all articles