Java之浅拷贝和深拷贝问题(clone)
程序员文章站
2022-05-20 10:09:37
...
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)。
先学习二、三,之后重写。
下一篇: 推荐一本很好的maven实战(完整版)