关于clone方法

我为JAVA狂 2012-06-23 03:14:28
Date date1 = new Date();
Date date2 = (Date)(date1.clone());
print(date1 == date2);// false
print(date1.equals(date2));// true

书上介绍,在这里的复制是浅复制,就是如果域是基本类型的,它的值被复制。而如果域是对象,域的引用将被复制。
按照这个浅复制原则,这里的date2应该是复制了date1的引用。怎么 date1 == date2 是错的呢
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我为JAVA狂 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你这本书厉害了 两点都错

第1 Date是深克隆 第2 即使是浅克隆也不是引用被复制

把书名说出来 叫大家小心点 新手最怕被烂书引入歧途了
[/Quote]

额...是我理解错了
hippoppower 2012-06-23
  • 打赏
  • 举报
回复
你这本书厉害了 两点都错

第1 Date是深克隆 第2 即使是浅克隆也不是引用被复制

把书名说出来 叫大家小心点 新手最怕被烂书引入歧途了
qybao 2012-06-23
  • 打赏
  • 举报
回复
深拷贝还是浅拷贝要查看date1.clone()的源代码才知道
如果源代码是 return this 则属于前拷贝,如果是 return new Date(this.getTime()) 则属于深拷贝
现在手头没有源码查看不了
不过从LZ的例子来分析,应该属于深拷贝
Edward1688 2012-06-23
  • 打赏
  • 举报
回复
这就要看==和.equals()方法的区别了,==比较的是内存地址是否相同,而.equals()方法比较的是两个对象的值是否相同。

date1与date2是两个不同的对象,在内存中分配的空间不同,所以它们的内存地址不同,用==比较时返回的就是false了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧