Java数组的复制

前言

Java中一维数组的复制有两种方法,分别是数组引用的复制与数组的复制。在开发中,需要额外注意,两种方法的异同在下文中介绍。

一、数组引用的复制

数组的类型属于引用类型,即定义的数组型变量是一个数组的引用。顾名思义,数组引用的复制是指数组在复制后,共用一个地址值。先看一个例子。

int[] srcAry = { 1, 2, 3, 4, 5};
int[] cpyAry = srcAry;      //数组引用复制

//修改副本中的值,输出原数组中的所有值
cpyAry[1] = 10;
for(int v:srcAry){
    System.out.printf("%d ", v);   
}

System.out.println();

//修改原数组中的值,输出副本的所有值
srcAry[0] = 0;
for(int v:cpyAry){
System.out.printf("%d ", v);   
}

输出结果:
这里写图片描述
所以直接通过赋值的方式,是对数组引用的复制,一旦原数组或副本中的值被修改,则原数组与副本的值都会改变。

二、数组的复制

大多数时候,我们都更希望通过复制能够得到两个值相同,但互相独立的数组。就是下面的方法了。
1)arraycopy方法

int[] srcAry = { 1, 2, 3, 4, 5};
int[] cpyAry = new int[5];
System.arraycopy(srcAry, 0, cpyAry, 0, 5);
  • 函数原型:
void System.arraycopy(object src, int srcPos, Object dest, int destPos, int length);
  • 参数介绍:
    - src:被复制的原数组;
    - srcPos:原数组中的起始位置;
    - dest:目标数组;
    - destPos:目标数组的起始位置;
    - length:复制的数组元素数目;

2)Arrays.copyOf方法

import java.util.Arrays;    //需要引入util包中的Arrays类

int[] srcAry = { 1, 2, 3, 4, 5};

//完全复制 cpyAry = { 1, 2, 3, 4, 5}
int[] cpyAry = Arrays.copyOf(srcAry, 5);

//截取 cpyAry = { 1, 2, 3}
int[] cpyAry = Arrays.copyOf(srcAry, 3);

//扩充 cpyAry = { 1, 2, 3, 4, 5,0, 0}
int[] cpyAry = Arrays.copyOf(srcAry, 7);
  • 函数原型:
int[] copyOf(int[] original, int newLength)
  • 参数介绍:
    - original:要复制的数组;
    - newLength:要返回的副本的长度;

Arrays.copyOf方法有多个重载函数,更多可查看API文档

3)for循环逐一复制方法
这个就不多讲了,顺带写在这,能用前两种就用前两种吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值