Java中的深拷贝与浅拷贝

简介: Java中的深拷贝与浅拷贝

Java中的深拷贝与浅拷贝

据在复制原型对象的同时是否复制包含在原型对象中引用类型的成员变量 这个条件,原型模式的克隆机制分为两种,即浅克隆(Shallow Clone)和深克隆(Deep Clone)

浅克隆

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象(克隆对象与原型对象共享引用数据类型变量)。


深拷贝

除去那些引用其他对象的变量,被复制对象的所有变量都含有与原来的对象相同的值。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍

总结

  1. 可以在Java中通过实现Cloneable,克隆标记接口的方式获得浅拷贝的能力
  2. 要是想实现深拷贝可以通过重写clone方法,即可以通过在原有浅拷贝是通过二进制形式进行对引用数据类型进行克隆的方式,人为的将地址clone一次。
  3. 深拷贝可以通过序列化反序列话的方式进行

BeanUtils.copyProperties()的作用


BeanUtils.copyProperties() 是 Apache Commons BeanUtils 库中的一个方法,用于将一个 Java 对象的属性值复制到另一个 Java 对象中。

具体来说,该方法可以将一个 Java 对象的属性值(getter 方法返回的值)复制到另一个 Java 对象中对应的属性(setter 方法设置的值)。可以通过该方法将一个对象的属性值复制到另一个对象中,而不需要手动编写属性的赋值代码。

该方法通常用于 DTO(Data Transfer Object)和实体对象之间的属性赋值。在 DTO 和实体对象之间进行数据传输时,使用该方法可以避免手动编写属性赋值代码,提高开发效率。


下面是一个示例:

public class SourceObject {
    private String name;
    private int age;

    // getter and setter methods omitted for brevity
}

public class TargetObject {
    private String name;
    private int age;

    // getter and setter methods omitted for brevity
}

// Create a source object with some values
SourceObject source = new SourceObject();
source.setName("舒一笑");
source.setAge(30);

// Create a target object
TargetObject target = new TargetObject();

// Copy the values from the source object to the target object
BeanUtils.copyProperties(target, source);

// The target object now has the same values as the source object
System.out.println(target.getName()); // "舒一笑"
System.out.println(target.getAge()); // 30

目录
相关文章
|
2月前
|
Java
Java的浅拷贝与深拷贝
Java的浅拷贝与深拷贝
32 0
|
23天前
|
Java
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
|
18天前
|
存储 Dubbo Java
一篇文章讲明白Java的深拷贝和浅拷贝
一篇文章讲明白Java的深拷贝和浅拷贝
15 0
|
2月前
|
Java
【JAVA面试题】什么是深拷贝?什么是浅拷贝?
【JAVA面试题】什么是深拷贝?什么是浅拷贝?
|
10月前
|
Java
Java深拷贝和浅拷贝Map对象
Java深拷贝和浅拷贝Map对象
126 0
|
12月前
|
Java
【java面试题】- java深拷贝和浅拷贝区别?什么是引用拷贝?
java深拷贝和浅拷贝区别?什么是引用拷贝?
71 0
Java 最常见的面试题:深拷贝和浅拷贝区别是什么?
Java 最常见的面试题:深拷贝和浅拷贝区别是什么?
|
Java
【Java】深拷贝和浅拷贝,Cloneable接口
【Java】深拷贝和浅拷贝,Cloneable接口
169 0
【Java】深拷贝和浅拷贝,Cloneable接口
Zp
|
Java
JAVA深拷贝和浅拷贝
JAVA深拷贝和浅拷贝
Zp
83 0
|
Java C++
java的深拷贝和浅拷贝了解一下
java的深拷贝和浅拷贝了解一下
115 0