支持拷贝:实现Cloneable接口,重写clone方法、方法内容默认调用父类的clone方法。
2.1、浅拷贝
基础类型的变量拷贝之后是独立的,不会随着源变量变动而变
String类型拷贝之后也是独立的
引用类型拷贝的是引用地址,拷贝前后的变量引用同一个堆中的对象
public Object clone() throws CloneNotSupportedException { Study s = (Study) super.clone(); return s; }
基本类型、引用类型。
浅拷贝 基本类型(int类型)是独立的(改了值会生效),引用类型不独立的(同一份数据,string也是同样的)
2.2、深拷贝
变量的所有引用类型变量(除了String)都需要实现Cloneable(数组可以直接调用clone方法),clone方法中,引用类型需要各
自调用clone,重新赋值
public Object clone() throws CloneNotSupportedException { Study s = (Study) super.clone(); s.setScore(this.score.clone()); return s; }
java的传参,基本类型和引用类型传参
java在方法传递参数时,是将变量复制一份,然后传入方法体去执行。复制的是栈中的内容
所以基本类型是复制的变量名和值,值变了不影响源变量
引用类型复制的是变量名和值(引用地址),对象变了,会影响源变量(引用地址是一样的)
String:是不可变对象,重新赋值时,会在常量表新生成字符串(如果已有,直接取他的引用地址),将新字符串的引用地址赋值给栈中的新变量,因此源变量不会受影响