当前位置:首页 > Java

java如何复制物品

2026-03-24 13:41:15Java

深拷贝与浅拷贝的区别

浅拷贝仅复制对象的引用,不复制实际数据,修改副本会影响原对象。深拷贝创建完全独立的新对象,包括所有嵌套对象,修改副本不影响原对象。

实现浅拷贝的方法

1. 使用 clone() 方法
类需实现 Cloneable 接口并重写 clone() 方法:

class Item implements Cloneable {
    String name;
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone(); // 默认浅拷贝
    }
}
// 使用示例
Item original = new Item();
Item copy = (Item) original.clone();

2. 通过构造函数复制
直接在构造函数中传入原对象属性:

class Item {
    String name;
    Item(Item other) {
        this.name = other.name;
    }
}
// 使用示例
Item copy = new Item(original);

实现深拷贝的方法

1. 手动逐层复制
递归复制所有嵌套对象:

class Item implements Cloneable {
    String name;
    Nested nested;
    @Override
    public Object clone() throws CloneNotSupportedException {
        Item copy = (Item) super.clone();
        copy.nested = (Nested) nested.clone(); // 嵌套对象也需实现Cloneable
        return copy;
    }
}

2. 使用序列化(Serialization)
通过序列化与反序列化实现完全独立拷贝:

import java.io.*;
class Item implements Serializable {
    String name;
    Item deepCopy() throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return (Item) ois.readObject();
    }
}

第三方库工具

Apache Commons Lang
使用 SerializationUtils.clone() 实现深拷贝:

java如何复制物品

import org.apache.commons.lang3.SerializationUtils;
Item copy = SerializationUtils.clone(original);

注意事项

  • 深拷贝需确保所有嵌套类均支持序列化或实现 Cloneable
  • 性能敏感场景慎用序列化,手动复制效率更高。
  • 不可变对象(如 String)无需深拷贝,直接引用即可。

标签: 物品java
分享给朋友:

相关文章

如何配置java

如何配置java

安装Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面下载适合操作系统的JDK安装包。选择与系统架构匹配的版本(如Windows x64、macOS ARM等)。运行安装程…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…

java如何避免死锁

java如何避免死锁

避免死锁的方法 固定顺序获取锁 确保所有线程按照相同的顺序获取多个锁。例如,若需要获取锁A和锁B,所有线程必须先获取A再获取B,避免交叉依赖导致的死锁。这种方式破坏了“循环等待”条件。 使用锁超时机…