Java实体对象赋值给另一个new实体对象

在Java中,我们经常会遇到需要将一个实体对象的值赋给另一个新的实体对象的情况。这可以通过几种不同的方式实现,本文将介绍其中的一些常用方法,并提供相应的代码示例。

1. 克隆方法

克隆方法是一种常见的将一个实体对象的值赋给另一个新的实体对象的方式。在Java中,我们可以通过实现Cloneable接口和重写clone()方法来实现对象的克隆。以下是一个示例代码:

class Person implements Cloneable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public Person clone() throws CloneNotSupportedException {
        return (Person) super.clone();
    }
}

// 使用示例
Person person1 = new Person("Tom", 25);
Person person2 = null;
try {
    person2 = person1.clone();
} catch (CloneNotSupportedException e) {
    e.printStackTrace();
}

System.out.println(person2.getName()); // 输出 "Tom"
System.out.println(person2.getAge()); // 输出 25

在上面的代码中,我们定义了一个Person类,实现了Cloneable接口,并重写了clone()方法。通过调用clone()方法,我们可以将person1对象的值赋给person2对象。

需要注意的是,clone()方法是浅拷贝,即只会复制对象的值,并不会复制对象的引用。如果对象中包含其他引用类型的成员变量,那么这些成员变量将会被共享。

2. 构造方法

另一种常见的方式是使用构造方法来赋值。这种方式非常简单,只需要在新的实体对象的构造方法中传入要赋值的实体对象的属性值即可。以下是一个示例代码:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

// 使用示例
Person person1 = new Person("Tom", 25);
Person person2 = new Person(person1.getName(), person1.getAge());

System.out.println(person2.getName()); // 输出 "Tom"
System.out.println(person2.getAge()); // 输出 25

在上面的代码中,我们在新的实体对象的构造方法中传入了要赋值的实体对象的属性值,从而实现了将一个实体对象的值赋给另一个新的实体对象。

需要注意的是,使用构造方法赋值的方式是直接拷贝对象的属性值,而不会拷贝对象的引用,因此不会共享引用类型的成员变量。

3. 属性赋值

除了使用构造方法赋值,我们还可以直接通过属性赋值的方式将一个实体对象的值赋给另一个新的实体对象。这种方式通常需要在新的实体对象中提供相应的setter方法,并将要赋值的实体对象的属性值逐个赋给新的实体对象。以下是一个示例代码:

class Person {
    private String name;
    private int age;

    public Person() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

// 使用示例
Person person1 = new Person();
person1.setName("Tom");
person1.setAge(25);

Person person2 = new Person();
person2.setName(person1.getName());
person2.setAge(person1.getAge());

System.out.println(person2.getName()); // 输出 "Tom"
System.out.println(person2.getAge()); // 输出 25

在上面的代码中,我们通过setter方法将要赋值的实体对象的属性值逐个赋给新的实体对象。

需要注意的是,使用属性赋值的方式也是直接拷贝对象的属性值,而不会拷贝对象的引用。