「java深度克隆」java深度克隆方法
今天给各位分享java深度克隆的知识,其中也会对java深度克隆方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java bean 如何过滤某些属性进行深度克隆
- 2、java里关于克隆的问题,所有类都是Object的子类何必在复写clone方法
- 3、java如何深度copy一个object?
- 4、java中深克隆与浅克隆的区别
- 5、java中的浅克隆和深克隆是什么
java bean 如何过滤某些属性进行深度克隆
序列化bean,先写入,后读出。这两个bean 就毫无关系了。但内容一模一样。
public Serializable copyObject(Serializable sobj){
try{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(sobj);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (Serializable)ois.readObject();
}catch (Exception e) {
return null;
}
}
可以参考一下。不过 要求实现 Serializable接口。
原文:
java里关于克隆的问题,所有类都是Object的子类何必在复写clone方法
深度克隆的问题,如果类中成员包含集合类,如list等,或者包含map的,默认的clone方法为浅克隆,不会复制集合中的元素。如果复写clone方法,则可根据需求来复制成员。
java如何深度copy一个object?
java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。
iamge的复制可以用BufferedImage的方法:
public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage 的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster 的边界确定。指定 WritableRaster 必须具有与此图像兼容的 SampleModel。如果 outRaster 为 null,则创建一个合适的 WritableRaster。
不过还有一个简单的办法,就是创建一个一样大小和一样类型的BufferedImage,然后把要复制的图画上去,这两个图片就是一样的了。
java中深克隆与浅克隆的区别
能够给你做出解释,我很荣幸!!献丑了:
A、你说的很对,无论是深克隆还是浅克隆都是克隆,既然是克隆就必然会产生一个全新的对象,这个全新的对象和原对象的保持一致性的深浅取决于克隆的深度。但需要始终明确的一点是克隆的对象与源对象没有任何关系,它在堆中是一个独立的实体,占据独立的内存地址,与原对象没有任何引用与指向关系。这个新生的对象是在源对象被克隆时由JVM运行时环境在调用类加载器时通过反射创建出来的。
B、深克隆与浅克隆的区别:深克隆的过程是通过序列化来完成的,而序列化的过程可以将对象及所牵涉的所有引用链中的对象一起通过字节流的方式转移到特定的存储单元中(这个存储单元可以是内存也可以是硬盘,对于克隆通常是序列化至内存),再通过反序列化的过程读出这些序列化的字节流重构出对象,这样就完成了一个新对象的产生。而浅克隆不用序列化,这种克隆方式仅仅只是将指定的当前对象复制出来一个,这种复制过程不包括原对象引用的各个对象
C、克隆出的对象与原对象具有相同的属性及方法,但克隆的对象与原对象是属于两个不同的独立对象,因此二者占据内存中不同的空间地址。这就好比两个人长的极为相像但他们毕竟还是属于两个人,可以住在不同的场所。
java中的浅克隆和深克隆是什么
克隆是指克隆对象,在堆空间复制一块内存,是完全的两个对象,不是指针指向!浅克隆是指克隆一个对象,而该对象的属性只是基本数据类型,只克隆出该对象!深度克隆是指克隆的目标里面还有引用类型,引用类型里还有引用类型,同时把引用类型克隆出来叫深度克隆!常用的方法有两种,第一,需克隆的对象实现cloneable接口;第二,使用commons包提供的克隆方法。这两种方法都能实现深度克隆!
java深度克隆的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java深度克隆方法、java深度克隆的信息别忘了在本站进行查找喔。