Arrays.copyOf()到底是浅拷贝还是深拷贝

Arrays.copyOf这个方法拷贝了原数组,返回一个新的数组,这个拷贝的过程中到底是值传递还是指针传递,
尝试了一下,结果是指针传递,也就是说,虽然Arrays.copyOf虽然返回了一个新的数组,和原来的数组没有什么关系,
但是这两个数组里面的内容都是指向同一个引用的
下面是一个例子:
创建了一个student类来做实验

package com;

public class Student {
    private int id;
    private String name;
    private int Salary;

    public Student(int id,String name,int salary){
        this.id = id;
        this.name = name;
        this.Salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setSalary(int salary) {
        Salary = salary;
    }

    public int getSalary() {
        return Salary;
    }

    @Override
    public String toString() {
        return "[name:"+name+"][id:"+id+"][salary:"+Salary+"]";
    }

}

这个是使用Arrays.copyOf来进行测试

 

package com;

import java.util.Arrays;

public class Test {
    public static void main(String[] args){
        Student[] students = new Student[3];
        students[0] = new Student(3434,"chenjiazhan",835745);
        students[1] = new Student(8347543,"guerge",5435);
        students[2] = new Student(4835,"urgirt",34543);
        Student[] copy = Arrays.copyOf(students,students.length);
        for(Student s : copy){
            System.out.println(s.toString());
        }
        copy[1].setId(5832573);
        System.out.println("改变后的数组");
        for(Student s : copy){
            System.out.println(s.toString());
        }
        System.out.println("复制后的数组改变后是否是会影响到原来的数组,也就是这两个数组里面所存储的内容指针是不是指向同一个地方");
        for(Student s : students){
            System.out.println(s.toString());
        }
        System.out.println("很遗憾,确实是这样的");

    }
}

最终的结果Arrays.copyOf()到底是浅拷贝还是深拷贝_第1张图片

观察第二行的id数据,对copy数组的改变其实也改变了students数组里面的内容了

 

创建了一个student[]的数组,然后通过arrays.copyOf来返回了一个copy的数组,对copy数组进行修改,最终的
student[]也发生了修改,证明了这个拷贝的过程是一个浅拷贝的过程,只是对指针进行了拷贝,并没有对其中的
内容进行拷贝。

所以最终结论就是这个方法是浅层拷贝,只拷贝了这个指针

你可能感兴趣的:(java)