当前位置:首页 > 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

卸载Java的步骤 Windows系统卸载方法 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到Java相关条目(如“Java 8 Update 251”),右键选择卸载并跟随向导完成操…

java如何创建项目

java如何创建项目

使用IDE创建Java项目(以IntelliJ IDEA为例) 打开IntelliJ IDEA,选择“New Project”。 在左侧菜单中选择“Java”,确保已配置JDK(若无需手动添加)。 勾…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

java程序如何打包

java程序如何打包

打包Java程序的方法 使用JAR打包 Java程序可以通过JAR(Java Archive)格式打包,这是一种常见的压缩格式,适用于包含多个类文件和资源的项目。以下是使用JAR打包的步骤: 确保项…

eclipse如何创建java

eclipse如何创建java

在Eclipse中创建Java项目 打开Eclipse后,选择菜单栏中的"File" -> "New" -> "Java Project"。在弹出的对话框中输入项目名称,确保"Use de…