Arrays.copyOf
详解
copyOf是Arrays类下面的一个方法,用于拷贝各种数组
以整型数组为例:int [ ] copyOf(int [ ]array,int newLength);第一个参数是想要拷贝到数组,第二个参数是新拷贝得到的数组的大小(不一定非得和原始数组大小一样)
俩次打印的结果如下:
这说明拷贝后,array1与array2指向了不同的对象,只不过其中的数一样,所以通过array2改变数组的值不会影响array1.
拓展
上面说了array2的大小不一定与array1的相同,所以,Arrays.copyOf也可以实现扩容:
扩容后,剩余位置就初始化为0。
那如果变成1/2长呢?也可以,结果如下:
System.arraycopy
实际上copyOf的内部就是调用arraycopy实现的
public static native void arraycopy(src,int srcPos,dest,int destPos,int length)
native说明是本地方法,本地方法的特点是:1.它的底层是由c/c++代码实现的,所以我们看不到它的实现方法 2.速度快。
src是从哪里拷,srcPos是从哪个位置开始拷(即下标),dest是考到哪里,length是要拷贝多长
那是null
由此可见,array2中剩余的空间就是系统默认值
拓展
根据这个方法的参数,就可以知道,System.arraycopy可以指定拷贝区间
Arrays.copyOfRange
由arraycopy可以指定拷贝区间,又想到了Arrays.copyOfRange,它也可以。还是以整型数组举例
int [ ] copyOfRange(int [ ]array,int from,int to);
有返回值,所以要接收
这是从下标为1拷贝到下标为3,结果为:
这是因为在Java中的from to一般为左闭右开区间
数组名.clone()
这也是数组拷贝的方法之一
有关数组操作的其他方法
Arrays.equals
它是判断两个数组的对象的值是否完全一样,一样就返回true,否则返回false
结果为:
第一个打印false是因为数组是局部变量,它存放了所指向对象的地址,而array1与array2指向的空间不同,即地址不同,所以第一个是false
Arrays.fill
用法举例
将一个数组的值全部赋值为指定的值,可以对各种类型的数组进行操作
也可以局部赋值
还是再加上from to即可
结果呢?还是左闭右开区间