- 浏览: 127795 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
20082233:
你能详细解释下代码的意思吗?谢谢
js时间日期格式化 -
zhoche2008:
好文章,解决了我的问题
swt执行线程 -
hanyafei:
朋友,你那第二个选择之后出错,你那是正确的吗?
JSP+AJAX三级级联及更多级的实现 -
EdenWang:
哥们,这能显示么?
strut2异常问题的解决 -
JavaLanguageFun:
标记一下 ,这个不错。
eclipse插件大全介绍,以及下载地址(转)
转载自:http://www.java2000.net/p1235
如下的程序,我们克隆羊圈,每个羊圈里有一只羊
- package test.lang;
- public class Sheep implements Cloneable {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public Sheep clone() throws CloneNotSupportedException {
- return (Sheep) super.clone();
- }
- public static void main(String[] args) throws CloneNotSupportedException {
- Sheepfold sheepfold1 = new Sheepfold();
- sheepfold1.setName("第一个羊圈");
- Sheep sheep1 = new Sheep();
- sheep1.setName("第一只羊");
- sheepfold1.setSheep(sheep1);
- Sheepfold sheepfold2 = sheepfold1.clone();
- sheepfold2.setName("第一个羊圈的克隆");
- System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName());
- System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName());
- System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep()));
- }
- }
- class Sheepfold implements Cloneable {
- private String name;
- private Sheep sheep;
- @Override
- public Sheepfold clone() throws CloneNotSupportedException {
- Sheepfold o = (Sheepfold) super.clone();
- return o;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Sheep getSheep() {
- return sheep;
- }
- public void setSheep(Sheep sheep) {
- this.sheep = sheep;
- }
- }
package test.lang; public class Sheep implements Cloneable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Sheep clone() throws CloneNotSupportedException { return (Sheep) super.clone(); } public static void main(String[] args) throws CloneNotSupportedException { Sheepfold sheepfold1 = new Sheepfold(); sheepfold1.setName("第一个羊圈"); Sheep sheep1 = new Sheep(); sheep1.setName("第一只羊"); sheepfold1.setSheep(sheep1); Sheepfold sheepfold2 = sheepfold1.clone(); sheepfold2.setName("第一个羊圈的克隆"); System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName()); System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName()); System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep())); } } class Sheepfold implements Cloneable { private String name; private Sheep sheep; @Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); return o; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Sheep getSheep() { return sheep; } public void setSheep(Sheep sheep) { this.sheep = sheep; } }
运行结果如下:
- sheepfold1.name=第一个羊圈,sheep.name=第一只羊
- sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
- sheepfold1.sheep==sheepfold1.sheep?true
sheepfold1.name=第一个羊圈,sheep.name=第一只羊 sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊 sheepfold1.sheep==sheepfold1.sheep?true
克隆的羊圈,里面的羊还是第一个羊圈的羊,他们完全相同.并没有被克隆过来,这就是浅层克隆,我们调整代码,实现深层克隆
- @Override
- public Sheepfold clone() throws CloneNotSupportedException {
- Sheepfold o = (Sheepfold) super.clone();
- o.sheep = this.sheep.clone();
- return o;
- }
@Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); o.sheep = this.sheep.clone(); return o; }
运行结果
- sheepfold1.name=第一个羊圈,sheep.name=第一只羊
- sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
- sheepfold1.sheep==sheepfold1.sheep?false
发表评论
-
浅复制与深复制概念
2010-09-28 11:00 7091.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变 ... -
Java基础:Java开发中的23种设计模式
2009-10-26 10:07 5461、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品, ... -
java中120个经典问题(1)
2009-10-26 10:03 7061.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便 ... -
EXE4J
2009-10-17 16:49 1921进入exe4j的网站 http://www ... -
MANIFEST.MF 文件内容详解
2009-10-15 19:21 704MANIFEST.MF 文件内容详解 打开 ... -
一段最简单的生成不重复随机数的程序
2009-10-15 18:44 905转载:http://www.java2000.net/p711 ... -
java 获取当前路径方法
2009-10-15 16:45 2081import java.io.File; /** * ... -
Java做的注册模块
2009-10-10 14:29 836转载自:http://blog.csdn.net/baohui ... -
java操作注册表
2009-10-10 14:26 780/** *@Author *@Date Oct 10, 2 ... -
Java编程那些事儿108——网络编程示例1
2009-06-24 10:01 648陈跃峰 出自:http://blog.csdn.net ... -
使用J2SE API读取Properties文件的六种方法
2009-05-23 12:26 814转载自:http://www.java2000.net/p85 ... -
Java IO处理类的汇总
2009-05-21 22:41 721http://www.java2000.net/p1225 ... -
Java对象的序列化和反序列化
2009-05-20 23:43 676转载:http://www.java2000.net/p134 ... -
java写文件方法之比较
2009-05-20 23:37 1616import java.io.BufferedOutputSt ... -
Java图像传输方法
2009-05-18 12:07 3104在研发B/S视频系统时候涉及到了图片在网络中的传输,研究了一些 ... -
算术运算符部分=晋升
2009-05-15 23:17 722在算术运算符部分,需要特别注意的一个语法现象是“晋升”。晋升指 ... -
JDK1.5新特性
2009-05-09 21:32 844今天浏览了jdk1.5的新特性: 泛型: public c ... -
编写Java动态代理的步骤
2009-05-08 17:29 885编写Java动态代理的步骤如下: 1.创建一个实现接口 ... -
每个初学者都应该搞懂的几个问题?
2009-05-07 19:56 568转载自:http://flustar.itey ... -
eclipse插件大全介绍,以及下载地址(转)
2009-02-24 17:22 3239好东西先放好先^_^ Eclipse及其插 ...
相关推荐
深度克隆对象,不过效率没有显示的new对象快,不过很安全
go-clone:深度克隆任何Go数据 包clone提供了对任何Go数据进行深度克隆的功能。 它还提供了一个包装器,以保护指针免受任何意外的突变。 Clone / Slowly可以克隆任何结构的未导出字段。 明智地使用此功能。 安装 ...
Java克隆(Clone)是Java语言的特性之一,本篇文章主要介绍了Java中的Clone机制是如何工作的,需要的朋友可以参考下
对象克隆ES5的深克隆和比较概要// just for conveniencevar log = function ( ) { console . log . apply ( console , [ ] . slice . call ( arguments ) ) } ; var src = { name : 'dankogai' , lang : [ 'perl' ] ...
java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)
深度克隆并返回模式的副本,向该模式添加关键路径/模式类型对,您还可以添加另一个模式并复制所有路径、虚拟、getter、setter、索引、方法和静态。 特征: 深度克隆模式 复制路径、虚拟、getter、setter、索引、...
基于的深度克隆,在处理大对象时比传统的克隆实现效率更高。 需要节点6或更高版本。 注意:这不是传统的clone()。 对源对象的更改将反映在克隆中,但是对克隆的更改不会修改源。 表现 根据对象大小的不同, ...
arcgis Pro深度学习环境部署教程,clone一个名字为plam-detection的工程环境;clone的位置在C:\Users\admin\AppData\Local\ESRI\conda\envs可以去在Pro的project下切换环境。(安装完Pro后默认的conda的环境位置:C:...
这个 JavaScript 包导出一个深度克隆运算符,它接受可能包含引用循环的任意对象图。 clone 操作符委托给实现它的任何对象的 clone 方法。 $ npm install --save pop-clone clone 方法接受一个值或对象图,并返回一...
地位系统地位特拉维斯 宝石版 代码Climante描述该gem提供了本机实现,可以深度克隆Ruby对象。 它支持Ruby 1.9.3、2.2.x,2.3.x和2.4.x。安装 gem install ruby_deep_clone或将其添加到您的Gemfile gem 'ruby_deep_...
js克隆使用深度复制的Javascript对象复制用法var deepClone = require ( './js-clone/index.js' ) ;var object = { name : 'Kator James' , work : { companyName : 'LogicalAddress Ltd' , getCompanyName : ...
深度克隆对象,支持循环引用和属性描述符 var clone = require ( '@dmail/object-clone' ) ; var a = { name : 'a' } ; var b = clone ( a ) ; b . name ; // 'a' // of course b != a 它克隆得很深 var a = { ...
克隆json 安装 # Install with npm $ npm install clone-json --save # Install with yarn $ yarn add clone-json 用法 两个数组相等 let cloneJson = require ( 'clone-json' ) let json = { a : 123 , b : '...
深度克隆JavaScript 手动的: [removed][removed]代码: [removed][removed] 然后在您自己的代码中: KlonObjekt = MeineFunktionen.clone(Objekt); 或者 KlonObjekt = Objekt.clone();
这篇文章主要介绍了javascript浅层克隆、深度克隆对比及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、浅层克隆, (引用值改变, 两个都一起变) ...
这是我使用纯JS深度克隆对象的实现。 在编码面试中经常被问到 :skull: ,很少在没有lodash之类的库的情况下使用。 支持以下测试用例(至少到目前为止我已经考虑过): 空对象(谁不想) 非对象 数组 简单对象...
主要介绍了Java利用序列化实现对象深度clone的方法,实例分析了java序列化及对象克隆的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Whatsapp克隆Whatsapp-clone是基于原始WhatsApp UI和实时消息创建深度创建全栈应用程序的深入实现。 UI严格在ReactDOM和CSS3中实现,而实时消息传递则通过Pusher完成。 随着使用Travis CI,Docker和AWS对CI / CD管道...
主要给大家介绍了关于C# List引用类型克隆的3种方法,包括反射、序列化(依赖Newtonsoft.Json)以及序列化(BinaryFormatter)的实现方法,需要的朋友可以参考借鉴,下面来一起看看吧
如果引用类型里面还包含很多引用类型,或者内层引用类型的类里面又包含多层引用类型,那么通过clone()方法逐一拷贝每一个引用类型来实现深拷贝的方法就会很麻烦。这时我们可以用序列化来实现对象的深拷贝。