Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪?

通过=实现对象拷贝:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student implements Cloneable{ private int id;
private String name;
private int sex; @Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
} 
public static void main(String[] args) {
Student student = new Student(1001, "sam", 1);
Student student1 = student;
System.out.println(student == student1);
student1.setName("zhangsan");
System.out.println(student.toString());
}

结果:

true
Student(id=1001, name=zhangsan, sex=1)

  从结果上看,student和student1指向同一个对象,我修改了student1的数据,由于student指向同一个对象,导致student的数据也变了,

但是现在,我想要源对象的副本,不希望源对象和target对象之间有任何关联,我们可以使用clone()

clone()实现对象拷贝:

public static void main(String[] args) throws Exception{
Student student = new Student(1001, "sam", 1);
Student student1 = (Student)student.clone();
System.out.println(student == student1);
student1.setName("zhangsan");
System.out.println(student.toString());
}

结果:

false
Student(id=1001, name=sam, sex=1)

从结果上看,我们知道这次通过clone()创建了一个对象,和源对象没有关联

PS:克隆一个对象并不会调用对象的构造方法

做个预告,下篇文章会写深拷贝和浅拷贝,包括clone内容的一个完善,Java基础(十三)--深拷贝和浅拷贝

最新文章

  1. 使用php+swoole对client数据实时更新(上)
  2. Basic Virus's Infection & Variation [Python]
  3. 安装MySQLdb
  4. js jquery, jquery-ui 获取form各种表单input的值?
  5. 使用xca生成SSL证书
  6. SublimeText使用技巧
  7. SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
  8. html5碰撞小球模拟
  9. Pomodairo,番茄工作法-应用篇
  10. ThinkPHP3.1新特性:Action参数绑定
  11. 关于c语言不定参数的研究
  12. Delphi XE7下如何创建一个Android模拟器调试
  13. C语言中的函数指针
  14. ios开发设置不同字体
  15. .net是最牛逼的开发平台没有之一
  16. (一)SQL关联查询的使用技巧 (各种 join)
  17. 从Eclipse插件中读取资源
  18. 《java入门第一季》之面向对象多态面试题(多态收尾)
  19. BZOJ_2743_[HEOI2012]采花_离线+树状数组
  20. 发现一款适合php网站的管理软件——kodexplorer,能取代ftp

热门文章

  1. POJ - 3352 Road Construction(边双连通分支)
  2. 将多个jar合并为一个jar
  3. I.MX6 mkuserimg.sh 使用
  4. bzoj3251
  5. asp.net 常用代码
  6. bzoj 1863: [Zjoi2006]trouble 皇帝的烦恼【二分+dp】
  7. 多选下拉框(select 下拉多选)
  8. Centos 7 chrome
  9. [SPOJ375]Qtree
  10. _bzoj1500 [NOI2005]维修数列【真·Splay】