对象的拷贝

拷贝可以分为深拷贝和浅拷贝。
所谓深拷贝,就是指没有内存共享的拷贝。
所谓浅拷贝,就是指有内存共享的拷贝。
@案例:
创建一个People类,实例化一个People对象,再通过实现Cloneable接口,将People对象进行拷贝,最后并进行验证。

@代码实现:
public class ClassCopyTest {
public static void main(String[] args) {
People p1=new People(“zs”,15);
People p2=null;
try {
p2=(People) p1.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
p1.age=123;
System.out.println(p1.address+" "+p2.address);
}

}

/*
创建一个People类,并且继承Cloneable接口,其中有三个成员变量,String类型的name,int类型的age,和Address类型的address,并且通过带参构造方法对该类进行初始化然后重写clone方法。
/
class People implements Cloneable{
String name;
int age;
Address address;
public People(String name,int age){
this.name=name;
this.age=age;
address=new Address();
}
@Override
public Object clone()throws CloneNotSupportedException{
Object o=super.clone();
People p=(People) o;
p.address=(Address) this.address.clone();
return p;
}
}
/

创建一个Address类,有一个成员变量为int类型的id,重写其clone方法
*/
class Address implements Cloneable {
int id;
@Override
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
}

@最终结果:
在这里插入图片描述

@结果分析:
可见,对该age进行重新赋值之后,并未改变拷贝后的age,可见该对象的拷贝是深拷贝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool提供了多种对象拷贝的方法,以下是其中两种常用的方法: 1. BeanUtil.copyProperties(source, target) 这是最常用的对象拷贝方法,可以将源对象的属性值拷贝到目标对象中。示例如下: ```java // 定义源对象 public class SourceObject { private String name; private Integer age; // getters/setters } // 定义目标对象 public class TargetObject { private String name; private Integer age; // getters/setters } // 创建源对象 SourceObject source = new SourceObject(); source.setName("Tom"); source.setAge(18); // 创建目标对象 TargetObject target = new TargetObject(); // 拷贝属性值 BeanUtil.copyProperties(source, target); ``` 2. CloneSupport.clone() 这是一个基于反射的对象拷贝方法,可以将一个对象的属性值拷贝到另一个对象中。示例如下: ```java // 定义源对象 public class SourceObject implements Cloneable { private String name; private Integer age; // getters/setters @Override public Object clone() { return CloneSupport.clone(this); } } // 定义目标对象 public class TargetObject { private String name; private Integer age; // getters/setters } // 创建源对象 SourceObject source = new SourceObject(); source.setName("Tom"); source.setAge(18); // 创建目标对象 TargetObject target = new TargetObject(); // 拷贝属性值 CloneSupport.clone(source, target); ``` 需要注意的是,如果要对自定义对象进行拷贝,需要实现Cloneable接口并重写clone()方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值