JDK源码——System.md

Posted by GershonHold on 10-03,2021

1.arraycopy方法 (复制数组)

(1)方法原型

public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)

对于该方法,值得注意的是:

对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量
传递给副本的一维数组,修改副本时,会影响原来的数组

(2)我写了一个测试类示例如下:

public class Test_System_arrayCopy {
    public static void main(String[] args) {
        Man[] before = new Man[]{new Man("Man1", "Unhappy"),new Man("Man2", "Unhappy")};//初始化对象数组
        Man[] after = new Man[before.length];//新建一个目标对象数组

        System.arraycopy(before,0,after,0,before.length);

        //深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制
        System.out.println("随着时间流逝,两个人前后是否一样:"+(before[0] == after[0]?"浅复制":"深复制"));

        //Man1变得开心之后
        after[0].setSpirit("Happy");

        System.out.println("Man1变得快乐后,他以前的状态竟然也变成Happy了(要是现实生活里人也能这样就好了!)");

        for (Man Man : after){
            System.out.println(Man);
        }

        for (Man Man : before){
            System.out.println(Man);
        }
    }


}

    class Man{
    private String name;
    private String spirit;

        //无参构造函数
        public Man() { }
        //有参构造函数
        public Man(String name, String spirit) {
            super();
            this.name = name;
            this.spirit = spirit;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSpirit() {
            return spirit;
        }

        public void setSpirit(String spirit) {
            this.spirit = spirit;
        }

        @Override
        public String toString() {
            return "Man{" +
                    "name=" + name +
                    ", spirit=" + spirit +
                    '}';
        }
    }

(3)异常

IndexOutOfBoundsException - 如果复制会导致对数组范围以外的数据的访问。
ArrayStoreException - 如果因为类型不匹配而使得无法将 src 数组中的元素存储到 dest 数组中。
NullPointerException - 如果 src 或 dest 为 null