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基础(十三)--深拷贝和浅拷贝

Java基础(十二)--clone()方法的更多相关文章

  1. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  2. java基础(十二 )-----Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...

  3. java基础十二[集合与泛型](阅读Head First Java记录)

    集合 List 知道索引顺序的集合,ArrayList.LinkedList.Vector三个子类实现了List接口   ArrayList ArrayList没有排序方法,可以用Collection ...

  4. Java基础(十二)之包和权限访问

    软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,pac ...

  5. Java实习生常规技术面试题每日十题Java基础(二)

    目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...

  6. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  7. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  8. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

  9. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

随机推荐

  1. aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务

    日志服务(Log Service,Log)是针对日志场景的一站式服务,在阿里巴巴集团内部被广泛使用.用户无需开发就能快捷完成日志生命周期中采集.消费.投递以及查询功能. 日志服务当前提供如下功能 日志 ...

  2. java 类属性、方法加载的顺序

    1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性

  3. apache服务器本质

    apache服务器本质上说是一个TCP socket服务,socket模型如下: 下面以worker MPM来说明apache代码中相应处理的位置在哪里: (以apache httpd 2.2.23版 ...

  4. snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)

    1110: 传输网络 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 43  Solved: 18[Submit][Status][Web Board] ...

  5. javascript 中==与===

    1.==相等运算符 1.1如果操作数具有相同的类型,则判断其等同性,如果两个数的值相等,则返回true(相等),否则返回 false (不相等) 1.2如果两个操作数类型不同,则按如下规则: null ...

  6. form的一个特性

    在一个form表单中,若只有一个input,按回车键表单会自动提交,但是当表单中存在多个input时,按回车键不会执行任何操作,这是form表单的一个特性

  7. PHP编程常见小错误错误

    使用PHP的过程中经常因为粗心出一些简单的错误,先将自己遇到几个的记录下来,以后慢慢增加. 1 Fatal error: Function name must be a string 翻译很简单,就是 ...

  8. Ubuntu adb devices :???????????? no permissions 解决方法[转]

    转自: http://www.cnblogs.com/cat-lee/archive/2011/07/09/2101718.html untun下USB连接Android手机后,使用adb devic ...

  9. bzoj 3830: [Poi2014]Freight【dp】

    参考:https://blog.csdn.net/zqh_wz/article/details/52953516 妙啊 看成分段问题,因为火车只能一批一批的走(易证= =)设f[i]为到i为止的车都走 ...

  10. element中upload单图片转base64后添加进数组,请求接口

    //先上代码 <template> <!-- data绑定的参数 getuploadloge: [ { url: '', name: '' } ], --> <!-- 编 ...