zoukankan      html  css  js  c++  java
  • 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("
    "+"修改数组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("
    --修改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

  • 相关阅读:
    开启mysql远程登录
    InfluxDB安装及配置
    基于ssh反向代理实现的远程协助
    小工具之进程守护器
    生成freeswitch事件的几种方式
    freeswitch模块之event_socket
    freeswitch对接其它SIP设备
    freeswitch注册过程分析
    redis参考文档
    创建型模式之Builder模式及实现
  • 原文地址:https://www.cnblogs.com/qikeyishu/p/9021595.html
Copyright © 2011-2022 走看看