Nama tatasusunan ialah alamat elemen *** yang ditunjuk oleh penuding kepala tatasusunan Jika anda boleh memahaminya dengan cara ini, maka fikirkannya dengan peha anda dan anda akan tahu bahawa a=b tidak dapat menyedarinya penetapan tatasusunan secara amnya, dalam C dan C++ kita A gelung digunakan untuk menetapkan nilai tunggal, serupa dengan ini:
untuk( int i=0;i<10;i++)
a[i]=b[i];
cara untuk mencapainya, setelah mempelajari C dan C++ sekian lama, saya menggunakannya lebih banyak, dan saya tidak mendapatinya menyusahkan. Tetapi dalam JAVA, ia tidak sama dengan C dan C++ sangat pintar Ia boleh menggunakan a=b untuk menetapkan b kepada a. Apabila menggunakan a=b dalam JAVA kandungan adalah output dalam bentuk tatasusunan, ia betul-betul sama dengan kandungan b, yang menunjukkan bahawa kaedah ini boleh dilaksanakan Ini adalah bagaimana ia digunakan dalam program saya, tetapi hasil pepijat. Pada mulanya saya mendapati bahawa tidak kira sama ada saya menggunakan a=b atau a=a.clone(); hasilnya adalah sama, yang agak mengelirukan, tetapi sekarang saya faham sepenuhnya. Untuk menggambarkan masalah ini, mari kita tunjukkan dengan atur cara:
private int[] subResources(int[] aa, int[] bb) { // 做减法 int []a=aa; int []b=bb; for (int i = 0; i < a.length; i++) a[i] = a[i] - b[i]; return a; }
Ini digunakan untuk melaksanakan fungsi yang ingin menolak dua tatasusunan Dalam atur cara memanggil, gunakan
int []allo=pcb0.getAllocation().clone(); //方式1 //int []allo=pcb0.getAllocation()//方式2 int[] allocation = this.addResources(allo, request);
di atas dua cara. Hasil berbeza yang dihasilkan dengan menghantar parameter ialah apabila anda mengubah suai nilai parameter yang diluluskan dalam fungsi addResources, kaedah 1 tidak boleh menukar data asal, tetapi kaedah 2 boleh menukar data asal. Apabila menetapkan nilai dalam kaedah 1, ia mula-mula mencipta salinan tatasusunan, dan kemudian memberikan salinan itu kepada tatasusunan sasaran Dengan cara ini, alamat tatasusunan salinan pastinya tidak sama dengan alamat tatasusunan asal dengan cara ini, tidak kira bagaimana anda mengubahnya, kaedah 1 tidak akan mengubah data asal, tetapi kaedah 2 adalah berbeza secara langsung memperuntukkan alamat data kepada data sasaran, supaya nama tatasusunan yang berbeza bagi dua tatasusunan. sebenarnya merujuk kepada alamat yang sama, jadi sudah tentu nilai asal boleh diubah.
Dianalisis dengan cara ini, ia sedikit seperti nilai penunjuk dan rujukan dalam parameter fungsi yang dihantar dalam C++ Memandangkan penunjuk ditinggalkan dalam Java, semua hubungan penunjuk menggunakan jenis rujukan, yang tahan lama dalam C++ mudah untuk melakukan kesilapan seperti itu. Ia bukan seperti menghantar nilai addResources (int *a,int *b) atau addResources (int a[],int b[]) seperti dalam C++. Ini akan menjadi satu kelemahan Nampaknya ini adalah satu-satunya masa di tempat ini dalam hidup saya. Sekarang saya faham mengapa soalan asas di pameran kerja kelihatan mudah, tetapi tidak semua orang dapat menjawabnya dengan baik .
Atas ialah kandungan terperinci Bagaimana untuk menetapkan nilai antara tatasusunan di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!