一、 概述
在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
}