Cloneable接口是一个标记接口,也就是没有任何内容,定义以下:html
这里分析一下这个接口的用法,clone方法是在Object种定义的,并且是protected型的,只有实现了这个接口,才能够在该类的实例上调用clone方法,不然会抛出CloneNotSupportException。Object中默认的实现是一个浅拷贝,也就是表面拷贝,若是须要实现深层次拷贝的话,必须对类中可变域生成新的实例。java
更多浅拷贝理解:java对象深复制、浅复制(深拷贝、浅拷贝)的理解post
Object提供了一个对象拷贝的默认方法clone方法,可是该方法是有缺陷的,它提供了一种浅拷贝方式,也就是它并不会把对象全部属性所有拷贝一份,而是有选择性的拷贝,拷贝规则以下:url
一、基本类型spa
若是变量是基本类型,则拷贝其值,好比:int、float、long等。htm
二、String字符串对象
这个比较特殊,拷贝的是地址,是个引用,可是在修改的时候,它会从字符串池(String Pool)中从新生成新的字符串,原有的字符串对象保持不变,此处能够认为String是个基本类型。blog
三、对象接口
若是变量时一个实例对象,则拷贝地址引用,也就是说此时新拷贝出的对象与原有对象共享该实例变量,不受访问权限的限制。这在Java中很疯狂,由于它突破了访问权限的定义,一个private修饰的变量,居然能够被两个实例对象访问。字符串