概念
在讲克隆之前我们首先熟悉一个常见的面试题。深拷贝和浅拷贝。
储存地址 | 修改副本的值是否会影响到原变量 | |
浅拷贝 | 原变量与副本均指向同一个地址 | 是 |
深拷贝 | 副本变量另外储存在另外的独立空间(包括属性也有其独自的地址) | 否 |
如图:
大家都知道的一种拷贝方式,就是 == :
Student student1 = new Student ();
Student student2 = student1;
但是 == 只是浅拷贝。如果我们想要在修改student2d的基础上去又要不影响到Student1,那就要用到克隆( clone() )了。
public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Student student = new Student("lps",14); Student student1 = student.clone(); student1.setName("qqq"); System.out.println(student.toString()); System.out.println(student1.toString()); } }
但是却报错了:
java: clone() 在 java.lang.Object 中是 protected 访问控制
这是什么回事呢?protected不是可以在子类访问到吗?不是所有的累都是Object类吗?