Java中对于字符串而言浅拷贝和深拷贝没什么区别,因为字符串类中不存在引用类型成员变量。具体分析看:这篇讲得很清楚了
部分内容还参考了这篇
java.lang.Object 中对 clone() 方法的约定:
- 对于所有对象来说,x.clone() !=x 应当返回 true,因为克隆对象与原对象不是同一个对象;
- 对于所有对象来说,x.clone().getClass() == x.getClass() 应当返回 true,因为克隆对象与原对象的类型是一样的;
- 对于所有对象来说,x.clone().equals(x) 应当返回 true,因为使用 equals 比较时,它们的值都是相同的。
clone()方法特点:
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
看源码发现 clone() 使用了 native 修饰的本地方法,因此执行的性能会很高。
并且它返回的类型为 Object,因此在调用克隆之后要把对象强转为目标类型才行。
Arrays.copyOf()方法是浅克隆
对于Arrays类型,我们可以直接使用 Arrays.copyOf() 来实现克隆,例如
Student[] o1 = {
new Student(18,"Olive"), new Student(19, "