快捷搜索:  汽车  科技

clone怎么不复制指定方块(13为什么要用clone)

clone怎么不复制指定方块(13为什么要用clone)4、通过流深拷贝需要都实现Serializable浅拷贝和深拷贝3、深拷贝和浅拷贝 深拷贝需要重写clone方法,不仅仅只调用父类的方法,还需调用属性的clone方法; 深克隆比浅克隆要更加耗时,效率更低

1、在某些时刻我们可能会需要一个和A完全相同的新对象B,同时以后对B的任何改动都不会影响到A中的值。A和B是两个独立的对象,但B的初始值是由A对象确定的。用简单的赋值语句只对基本类型有效,对引用类型无效,仍会改变。Java可以采用一个个手动赋值,或者通过fastjson从object转成json再转回object,本质使用了反射,我们使用clone()更简单、高效。

2、new一个对象的过程和clone一个对象的过程

new操作符的本意是分配内存。程序执行到new操作符时,首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步为对象的初始,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操作这个对象。

clone第一步和new相似,都分配内存,调用clone方法时,分配的内存和原对象相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完毕之后,clone方法返回,一个新的对象被创建,同样可以把这个新对象的引用发布到外部

3、深拷贝和浅拷贝

深拷贝需要重写clone方法,不仅仅只调用父类的方法,还需调用属性的clone方法;

深克隆比浅克隆要更加耗时,效率更低

clone怎么不复制指定方块(13为什么要用clone)(1)

浅拷贝和深拷贝

4、通过流深拷贝需要都实现Serializable

通过ByteArrayOutputStream和ObjectOutputStream将对象序列化成流,因为写在流里面的是对象的一个拷贝,而原对象仍然存在于JVM里,所以利用这个特性可以实现对象的深拷贝。

再通过ByteArrayInputStream和ObjectInputStream将流序列化成对象

clone怎么不复制指定方块(13为什么要用clone)(2)

通过流深拷贝v

猜您喜欢: