Java基础之数组拷贝

Arrays.copyOf

详解

copyOf是Arrays类下面的一个方法,用于拷贝各种数组

以整型数组为例:int [ ] copyOf(int [ ]array,int newLength);第一个参数是想要拷贝到数组,第二个参数是新拷贝得到的数组的大小(不一定非得和原始数组大小一样)

Java基础之数组拷贝_第1张图片

俩次打印的结果如下:

Java基础之数组拷贝_第2张图片

这说明拷贝后,array1与array2指向了不同的对象,只不过其中的数一样,所以通过array2改变数组的值不会影响array1.

拓展

上面说了array2的大小不一定与array1的相同,所以,Arrays.copyOf也可以实现扩容:

Java基础之数组拷贝_第3张图片

Java基础之数组拷贝_第4张图片

扩容后,剩余位置就初始化为0。

那如果变成1/2长呢?也可以,结果如下:

Java基础之数组拷贝_第5张图片

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是要拷贝多长

Java基础之数组拷贝_第6张图片

Java基础之数组拷贝_第7张图片

Java基础之数组拷贝_第8张图片

Java基础之数组拷贝_第9张图片那是null

由此可见,array2中剩余的空间就是系统默认值

拓展

根据这个方法的参数,就可以知道,System.arraycopy可以指定拷贝区间

Java基础之数组拷贝_第10张图片

Java基础之数组拷贝_第11张图片

Arrays.copyOfRange

由arraycopy可以指定拷贝区间,又想到了Arrays.copyOfRange,它也可以。还是以整型数组举例

int [ ] copyOfRange(int [ ]array,int from,int to);

有返回值,所以要接收

Java基础之数组拷贝_第12张图片

这是从下标为1拷贝到下标为3,结果为:

Java基础之数组拷贝_第13张图片

这是因为在Java中的from to一般为左闭右开区间

数组名.clone()

这也是数组拷贝的方法之一

Java基础之数组拷贝_第14张图片

有关数组操作的其他方法

Arrays.equals

它是判断两个数组的对象的值是否完全一样,一样就返回true,否则返回false

Java基础之数组拷贝_第15张图片

结果为:

Java基础之数组拷贝_第16张图片

第一个打印false是因为数组是局部变量,它存放了所指向对象的地址,而array1与array2指向的空间不同,即地址不同,所以第一个是false

Arrays.fill

用法举例

将一个数组的值全部赋值为指定的值,可以对各种类型的数组进行操作

Java基础之数组拷贝_第17张图片

Java基础之数组拷贝_第18张图片

也可以局部赋值

还是再加上from to即可

Java基础之数组拷贝_第19张图片

结果呢?还是左闭右开区间

你可能感兴趣的:(开发语言,java,java基础语法,Java-se)