前言
我们想把一些数据拿过来直接用,最简单的使用“”“=”即可,在某些系统中一些重要的数据都会做备份,最简单的就是复制,需要使用java的api支持的clone方法
实验
为什么需要clone方法呢?不能使用"="么
为此开始一波测试
package ocm.pojo;
/**
* @Author: 闫明辉
* @Description:
* @Date: Create in 19:35 2020/2/20
*/
public class Stu {
private String name;
private int age;
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public Stu(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Stu s1 = new Stu("张三", 18);
//直接赋值
Stu s2=s1;
System.out.println(s2.getName());
s2.setName("li");
s2.setAge(11);
System.out.println("直接赋值---克隆后---分割线");
System.out.println("源对象 "+s1.getName()+" "+s1.getAge());
System.out.println("克隆对象 "+s2.getName()+" "+s2.getAge());
结果
张三
直接赋值---克隆后---分割线
源对象 li 11
克隆对象 li 11
使用“=”之后,克隆后的对象改变数据后,源对象的数据也改变了,出现了数据脏读
使用
1.pojo对象实现Cloneable接口
2.pojo对象重写clone方法
代码测试
package ocm.pojo;
/**
* @Author: 闫明辉
* @Description:
* @Date: Create in 19:35 2020/2/20
*/
public class Stu implements Cloneable {
private String name;
private int age;
public Stu clone() throws CloneNotSupportedException {
Stu s=(Stu)super.clone();
return s;
}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public Stu(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Stu s1 = new Stu("张三", 18);
Stu s=s1.clone();
s.setName("a");
s.setAge(20);
System.out.println("调用方法克隆---克隆后---分割线");
System.out.println("源对象"+" "+s1.getName()+" "+s1.getAge());
System.out.println("克隆对象"+" "+s.getName()+" "+s.getAge());
结果
调用方法克隆---克隆后---分割线
源对象 张三 18
克隆对象 a 20