Java数组的复制全解

Posted Thanlon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Java数组的复制全解的主要内容,如果未能解决你的问题,请参考以下文章

MySQL复制异常大扫盲:快速溯源与排查错误全解

jQuery数组处理全解

IntelliJ IDEA平台下JNI编程全解

IntelliJ IDEA平台下JNI编程全解

IntelliJ IDEA平台下JNI编程全解

Linux系统下findmnt命令使用全解