You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中返回与当前实例值相同的独立内存实例?

Java中创建当前实例独立副本的方法

Java里没有return new this;这种直接创建当前实例副本的语法,但有几种实用方式可以生成内存独立、值与原实例一致的新对象,修改新对象不会影响原实例:

1. 利用Clone机制

实现Cloneable接口并重写clone()方法,这是Java原生的对象拷贝方式:

public class User implements Cloneable {
    private int age;
    private String name;

    // 重写clone方法,默认是浅拷贝
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 如果类中有自定义引用类型成员,需要在这里手动克隆该成员实现深拷贝
        return super.clone();
    }
}

使用时直接调用:

User original = new User();
User copy = (User) original.clone();

注意:默认的clone()是浅拷贝,若类中包含可变引用类型(比如自定义的Address类),需要在clone()方法中对这些成员单独克隆,否则新对象和原对象会共享该引用。

2. 拷贝构造方法

编写一个以当前类实例为参数的构造方法,在方法内逐个复制成员变量:

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

    // 拷贝构造方法
    public User(User original) {
        this.age = original.age;
        this.name = original.name; // String是不可变类型,直接赋值即可;可变引用类型需深拷贝
    }
}

创建副本时:

User original = new User();
User copy = new User(original);

这种方式逻辑直观,能灵活控制每个成员的拷贝逻辑,适合需要自定义深拷贝的场景。

3. 借助工具类快速复制

如果项目中引入了Spring或Apache Commons工具库,可以用BeanUtils类一键复制属性,省去手动赋值的麻烦:

import org.springframework.beans.BeanUtils;

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

    public User createCopy() {
        User copy = new User();
        BeanUtils.copyProperties(this, copy);
        return copy;
    }
}

注意:工具类默认是浅拷贝,若有可变引用类型成员,仍需额外处理;同时要确保引入对应的依赖包。

内容的提问来源于stack exchange,提问作者418cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:37:06