欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java之浅拷贝和深拷贝问题(clone)

程序员文章站 2022-05-20 10:09:37
...

一、动机
设计了一个Score类保存一组学生的成绩

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] scores = new int[] { 88, 77, 51, 66 };
        Score s = new Score(scores);
        s.printScores();
        scores[2] = 99;
        s.printScores();
    }
}

class Score {
    private int[] scores;
    public Score(int[] scores) {
        this.scores = scores.clone();
    }

    public void printScores() {
        System.out.println(Arrays.toString(scores));
    }
}

①this.scores = scores的问题 : 由于Score内部直接引用了外部传入的int[]数组,这会造成外部代码对int[]数组的修改,影响到Score类的字段。如果外部代码不可信,这就会造成安全隐患。
②this.scores = scores.clone() : 使得外部代码对数组的修改不影响Score实例的int[]字段
③clone方法(protected修饰)属于Object类,而Java中所有的类都是Object的子类,故可以直接调用方法(JDK15)。

二、再见:深拷贝、浅拷贝问题!

三、详解Java中的clone方法 – 原型模式

先学习二、三,之后重写。

相关标签: # Java java