Object类的常用方法源码分析(更新中)
clone方法官方文档解释:
protected native Object clone() throws CloneNotSupportedException;
创建并返回此对象的副本。 “复制”的确切含义可能取决于对象的类别。 一般意图是,对于任何对象x ,表达式:
x.clone() != x
将是真的,并且表达式:
x.clone().getClass() == x.getClass()
会是true ,但这些不是绝对的要求。 虽然通常的情况是:
x.clone().equals(x)
会是true ,这不是绝对的要求。
按照惯例,返回的对象应该通过调用super.clone来获取。 如果一个类和它的所有超类(除了Object )都遵守这个约定,那么x.clone().getClass() == x.getClass() 。
按照惯例,这个方法返回的对象应该独立于这个对象(它被克隆)。 为了实现这种独立性,可能需要在返回之前修改super.clone返回的对象的一个或多个字段。 通常,这意味着复制包含被克隆对象的内部“深层结构”的任何可变对象,并将对这些对象的引用替换为对副本的引用。 如果一个类只包含原始字段或对不可变对象的引用,那么通常情况下, super.clone返回的对象中没有字段需要修改。
类Object的方法clone执行特定的克隆操作。 首先,如果该对象的类没有实现接口Cloneable ,则抛出CloneNotSupportedException 。 请注意,所有数组都被认为实现了接口Cloneable并且数组类型T[]的clone方法的返回类型是T[] ,其中 T 是任何引用或原始类型。 否则,此方法会创建此对象的类的新实例,并使用此对象的相应字段的内容来初始化其所有字段,就像通过赋值一样; 字段的内容本身不会被克隆。 因此,此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。
类Object本身并不实现接口Cloneable ,因此在类为Object的对象上调用clone方法将导致在运行时抛出异常。

浙公网安备 33010602011771号