Clone
Clone用来创建并返回此对象的一个副本。又分为浅层复制和深层复制。一般来说,对于任何对象x,如果表达式x.clone() != x是正确的,则表达式x.clone().getClass() == x.getClass()将是true,但这不是绝对条件。一般情况是,x.clone().equals(x)返回true。
对象的类型
对象的类型有2种,一种是基础数据(如,char、int、double等)组成的,叫做primitive;另外一种就是引用类型,存储在堆上。
在复制时,基础数据类型可以完全生成全新数据,与原数据相隔且相等。而引用对象就要复杂一些,复制的不是数据本身而是对数据的一个引用,即复制前后的2个对象使用的是同一个引用对象,他们各自拥有的只是对数据的引用。
以上这些在参数类型时也可以通用。
浅层复制
对于引用类型在复制时,只是简单的复制了它们的引用。这样的复制就是浅层复制。这种复制是浅层的,复制后得到的对象没有完全与被复制对象隔离,修改其中一个还是会影响到另外一个。但是这里存在一种特例,就是引用类型是不可变的类型,比如String类型这种被fianl修饰的不可变类,修改时不会影响到其他对象,可以等同于基础数据类型。
深层复制
深层复制就是将引用类型对应的对象,重新在堆中创建并返回对应的引用。需要引用对象也实现Cloneable接口,并在复制时同时复制引用对象。这样复制完成后的2个对象是完全相隔且相等的。