藉由對陣列物件的進一步探討,您可以稍微瞭解Java對物件處理的一些作法,首先來看看一個一維陣列參考名稱的宣告:
int[] arr;
在這個宣告中,arr表示一個可以參考至一維陣列物件的名稱,但是目前還沒有指定它參考至任何的物件,在Java中,=運算子用於基本資料型態時,是
將值複製給變數,但當它用於物件時,則是將物件指定給參考名稱來參考,您也可以將同一個物件指定給兩個參考名稱,當物件的值藉由其中一個參考名稱變更
時,另一個參考名稱所參考到的值也會更動,使用下面的程式來作示範:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] tmp1; int[] tmp2; tmp1 = arr1; tmp2 = arr1; for(int i = 0; i < tmp1.length; i++) System.out.print(tmp1[i] + " "); System.out.println(); for(int i = 0; i < tmp2.length; i++) System.out.print(tmp2[i] + " "); System.out.println(); tmp1[2] = 9; for(int i = 0; i < tmp1.length; i++) System.out.print(tmp1[i] + " "); System.out.println(); for(int i = 0; i < tmp2.length; i++) System.out.print(tmp2[i] + " "); System.out.println(); } }
執行結果:
1 2 3 4 5
1 2 3 4 5
1 2 9 4 5
1 2 9 4 5
|
在這個範例中,您藉由tmp1名稱改變了索引2的元素值,所以tmp2所參考到的索引2的元素值也會改變,事實上在這個程式中,有三個參考名稱參考至同一
個陣列物件,也就是arr1、tmp1與tmp2,所以您應該也知道,arr1索引2的值在程式執行後所參考到的值也改變了。
在宣告int[] arr之後,arr表示它是一個一維陣列物件的參考名稱,所以它可以參考至任何長度的一維陣列物件,使用下面這個例子來說明:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = {5, 6, 7}; int[] tmp; tmp = arr1; for(int i = 0; i < tmp.length; i++) System.out.print(tmp[i] + " "); System.out.println(); tmp = arr2; for(int i = 0; i < tmp.length; i++) System.out.print(tmp[i] + " "); System.out.println(); } }
執行結果:
在上面的程式中,tmp可以參考至5個元素的一維陣列,也可以參考至3個元素的一維陣列。
您瞭解到在Java中陣列是一個物件,而使用 = 指定時是將物件指定給陣列名稱來參考,而不是陣列複製,如果您想將整個陣列的值複製給另一個陣列該如何作呢?您可以使用迴圈,將整個陣列的元素值走訪一遍,並指定給另一個陣列相對應的索引位置,例如下面這個例子:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5]; for(int i = 0; i < arr1.length; i++) arr2[i] = arr1[i]; for(int i = 0; i < arr2.length; i++) System.out.print(arr2[i] + " "); System.out.println(); } }
執行結果:
另一個更簡便的方法是使用System類別所提供的靜態方法arraycopy(),其語法如下:
System.arraycopy(來源, 起始索引, 目的, 起始索引, 複製長度);
下面這個程式是個示範:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5]; System.arraycopy(arr1, 0, arr2, 0, arr1.length); for(int i = 0; i < arr2.length; i++) System.out.print(arr2[i] + " "); System.out.println(); } }
執行結果:
|
|