cari
RumahJavajavaTutorialMari 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.

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

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!

Kenyataan
Artikel ini dikembalikan pada:CSDN. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

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

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

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

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

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

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

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]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

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

Bagaimanakah saya boleh menggunakan RMI Java (Penyerahan Kaedah Jauh) untuk pengkomputeran yang diedarkan?Bagaimanakah saya boleh menggunakan RMI Java (Penyerahan Kaedah Jauh) untuk pengkomputeran yang diedarkan?Mar 11, 2025 pm 05:53 PM

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.

Bagaimana saya menggunakan API Soket Java untuk komunikasi rangkaian?Bagaimana saya menggunakan API Soket Java untuk komunikasi rangkaian?Mar 11, 2025 pm 05:53 PM

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

Bagaimana saya boleh membuat protokol rangkaian tersuai di java?Bagaimana saya boleh membuat protokol rangkaian tersuai di java?Mar 11, 2025 pm 05:52 PM

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

See all articles

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.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular