实现拷贝,需要实现Cloneable接口,重写clone方法、方法内容默认调用父类的clone方法。

浅拷贝

1.基础类型的变量拷贝之后是独立的,不会随着源变量变动而变
2. String类型拷贝之后也是独立的
3.引用类型拷贝的是引用地址,拷贝前后的变量引用同一个堆中的对象

  1. public Object clone() throws CloneNotSupportedException {
  2. Study s = (Study) super.clone();
  3. s.setScore(this.score.clone());
  4. return s;
  5. }

深拷贝

变量的所有引用类型变量(除了String)都需要实现Cloneable(数组可以直接调用clone方法),clone方法中,引用类型需要各自调用clone,重新赋值

  1. public Object clone() throws CloneNotSupportedException {
  2. Study s = (Study) super.clone();
  3. s.setScore(this.score.clone());
  4. return s;
  5. }

总结
java的传参,基本类型和引用类型传参
java在方法传递参数时,复制栈中的内容,然后传入方法体去执行。

  1. 基本类型是复制的变量名和值,值变了不影响源变量
  2. 引用类型复制的是变量名和值(引用地址),对象变了,会影响源变量(引用地址是一样的)
  3. String:是不可变对象,重新赋值时,会在常量表生成新字符串(如果已有,直接取他的引用地址),将新字符串的引用地址赋值给栈中的新变量,因此源变量不会受影响