一、 概述
在java中允許將一個數組變量拷貝給另外的一個數組,這時,兩個變量將引用同一個數組。但是java中數組的長度是固定的,當我們需要改變數組的長度的時候就可以使用Arrays的copyOf方法了。
二、問題
但是在實際中如果我們僅僅是將兩個變量指向同一個地址而已,因爲這樣做沒有任何的意義,直接新建一個變量並進行賦值就可以,如下:
/**
* Description :測試同一個數組使用連個變量
* @param
* @return
* @exception
* @author :loulan
* */
@Test
public void arrayTowV () {
String[] strs = {"1", "2", "3", "4", "5"};
String[] strs1 = strs;
System.out.println(ArrayUtil.arrayToString(strs)); // 1 2 3 4 5
System.out.println(ArrayUtil.arrayToString(strs1)); // 1 2 3 4 5
System.out.println("strs是否和strs1相同: " + strs.equals(strs1)); // true
}
三、意義
我們都知道,數組的長度一旦確定了就無法進行改變,而且運行程序中數組的長度必須是固定的,不是可變的(這就是爲什麼要使用集合了)。所以我們可以使用Arrays類的copyOf功能,這樣可以新建一個數組,並且重新設置長度,如下:
/**
* Description :進行數組拷貝的測試
* @param
* @return
* @exception
* @author :loulan
* */
@Test
public void arrayCopy () {
String[] strs = {"1", "2", "3", "4", "5"};
String[] strs1 = Arrays.copyOf(strs, 7);
strs1[5] = "6";
strs1[6] = "7";
System.out.println(ArrayUtil.arrayToString(strs)); // 1 2 3 4 5
System.out.println(ArrayUtil.arrayToString(strs1)); // 1 2 3 4 5 6 7
System.out.println("strs是否和strs1相同: " + strs.equals(strs1)); // false
}
當然我們也可以直接賦值給原來的變量,也就是說改變原來變量所指向數組的地址,這樣也是可以改變數組的長度的。如下:
/**
* Description :進行數組拷貝並改變原來數組的長度(其實沒有改變,改變的是原來變量所指向的數組)
* @param
* @return
* @exception
* @author :loulan
* */
@Test
public void arrayCopy2 () {
String[] strs = {"1", "2", "3", "4", "5"};
System.out.println(strs); // [Ljava.lang.String;@1d8d30f7
System.out.println(ArrayUtil.arrayToString(strs)); // 1 2 3 4 5
strs = Arrays.copyOf(strs, 7);
strs[5] = "6";
strs[6] = "7";
System.out.println(strs); // [Ljava.lang.String;@6b57696f
System.out.println(ArrayUtil.arrayToString(strs)); // 1 2 3 4 5 6 7
}