Java数组的复制全解
1、将一个基本数据类型数组的引用赋值给另一个数组
1 public class Array_copy { 2 int[] array1=new int[]{1,2,3,4,5,6}; 3 int[] array2=array1;//将array1的引用赋值给array2,两数组指向同一个内存空间 4 public static void main(String args[]){ 5 Array_copy ac = new Array_copy(); 6 for (int i=0;i<ac.array1.length;i++){ 7 System.out.print(ac.array1[i]+" "); 8 } 9 System.out.println(); 10 for (int i=0;i<ac.array1.length;i++){ 11 System.out.print(ac.array2[i]+" "); 12 } 13 System.out.println("\n"+"修改数组array1的值,查看array2是否改变"); 14 ac.array1[0]=10;//修改数组第一元素 15 for (int i=0;i<ac.array1.length;i++){ 16 System.out.print(ac.array1[i]+" "); 17 } 18 System.out.println(); 19 for (int i=0;i<ac.array1.length;i++){ 20 System.out.print(ac.array2[i]+" "); 21 } 22 } 23 }
这里只是复制了数组的引用,一个数组的改变会影响到另一个数组。
2、使用arraycopy方法复制基本数据类型数组
2.1. arraycopy方法声明
public static native void arraycopy(Object src,int srcPos,Object dest,int destPos,int lenhgth);
2.2. arraycopy方法参数简介
src:源数组
srcPos:开始复制的位置,从源数组哪个位置开始复制
dest:目的数组
descPos:将源数组复制到目标数组的起始位置
length:复制多少个源数组中的元素个数
2.2. arraycopy方法演示
1 public class Arraycopy { 2 int[] ary1 = new int[]{1, 2, 3, 4, 5, 6}; 3 int[] ary2 = new int[6]; 4 public void print(int[] array) { 5 for (int i : array) 6 System.out.print(i+" "); 7 System.out.println(); 8 } 9 /** 10 * 使用arraycopy方法将数组ary1复制给ary2 11 * @param args 12 */ 13 public static void main(String[] args) { 14 Arraycopy ac = new Arraycopy(); 15 System.out.println("---两数组初始---"); 16 ac.print(ac.ary1); 17 ac.print(ac.ary2); 18 System.out.println("---将ary1复制给ary2---"); 19 System.arraycopy(ac.ary1,0,ac.ary2,0,ac.ary1.length); 20 ac.print(ac.ary1); 21 ac.print(ac.ary2); 22 System.out.println("---修改ary1(ary2)查看ary2(ary1)是否变化---"); 23 ac.ary1[0]=0; 24 ac.print(ac.ary1); 25 ac.print(ac.ary2); 26 } 27 }
使用arraycopy方法进行数组复制,就不存在数组的引用,即:一个数组的内容的改变不会影响另一个数组的内容。
3、对象类型(引用类型)数组的复制
1 import java.awt.*; 2 3 public class Arraycopy2 { 4 /** 5 * 定义对象数组 6 */ 7 Label lb1[] = new Label[]{ 8 new Label("Label1"), 9 new Label("Label2"), 10 new Label("Label3") 11 }; 12 Label lb2[] = new Label[lb1.length]; 13 14 public static void main(String args[]) { 15 Arraycopy2 ac = new Arraycopy2(); 16 System.out.println("--将对象数组lb1复制给lb2--"); 17 System.out.print("lb1数组:"); 18 ac.print(ac.lb1); 19 //ac.lb2 = ac.lb1; 20 System.arraycopy(ac.lb1,0,ac.lb2,0,ac.lb1.length); 21 System.out.print("lb2数组:"); 22 ac.print(ac.lb2); 23 System.out.println("\n--修改lb1(lb2)查看lb2(lb1)是否变化--"); 24 ac.lb1[0].setText("Label0"); 25 System.out.print("lb1数组:"); 26 ac.print(ac.lb1); 27 System.out.print("lb2数组:"); 28 ac.print(ac.lb2);//修改lb1数组内容后发现lb2数组也发生改变,说明lb1和lb2指向同一内存空间。 29 //当然修改lb2内容lb1内容也会改变,这里不赘述了 30 } 31 32 public void print(Label[] lb) { 33 for (Label i : lb) { 34 System.out.print(i.getText() + " "); 35 } 36 System.out.println(); 37 } 38 }
和基本类型数组是不同的,当数组类型为对象类型时,用arraycopy方法复制数组复制的也只是引用,不是对象本身。
关联博客(CSDN):https://blog.csdn.net/m0_38022608/article/details/80262416