马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

Java中 对象赋值给另一个对象的4种方法

2023-11-28 15:04:02java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

在Java中,对象赋值给另一个对象可以通过多种方式实现,以下是一些主要的方法及其特点:

1、对象赋值给另一个对象的4中方式对比

方法 描述 示例代码
浅拷贝 拷贝对象的引用,不拷贝对象的内容。如果对象包含对其他对象的引用,那么这些引用也会被复制。 Object shallowCopy = originalObject;
深拷贝 拷贝对象的内容,如果对象包含对其他对象的引用,那么这些引用也会被复制。 Object deepCopy = new Object(originalObject);
对象克隆 创建一个新的对象,并复制原始对象的所有字段到新对象。可以是浅拷贝或深拷贝,取决于具体的实现。 Object clonedObject = originalObject.clone();
通过getters和setters赋值 通过使用对象的getters和setters方法来获取和设置属性值。适合于具有复杂属性的对象。 originalObject.setField1(value1); originalObject.setField2(value2);

2、浅拷贝对象赋值给另一个对象

在Java中,浅拷贝对象赋值给另一个对象意味着只复制对象的引用,而不复制对象的内容。如果对象包含对其他对象的引用,那么这些引用也会被复制。下面是一个示例代码,演示了如何将一个浅拷贝对象赋值给另一个对象:

public class ExampleClass implements Cloneable {
    private int field1;
    private String field2;
    private AnotherClass anotherObject;

    // 构造函数、getters和setters方法省略

    // 实现Cloneable接口并重写clone方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class AnotherClass {
    private int value;

    // 构造函数、getters和setters方法省略
}

// 创建一个原始对象
ExampleClass originalObject = new ExampleClass();
originalObject.setField1(1);
originalObject.setField2("Test");
originalObject.setAnotherObject(new AnotherClass());

// 将原始对象浅拷贝给另一个对象
try {
    ExampleClass shallowCopyObject = (ExampleClass) originalObject.clone();
} catch (CloneNotSupportedException e) {
    e.printStackTrace();
}

3、深拷贝对象赋值给另一个对象

深拷贝对象赋值给另一个对象意味着创建一个新的对象,并复制原始对象的所有属性及其引用的对象,以确保新对象和原始对象完全独立。在Java中,深拷贝通常需要自己实现,可以通过递归复制对象的方式来完成。下面是一个示例代码,演示了如何将一个深拷贝对象赋值给另一个对象:

import java.io.*;

public class ExampleClass implements Serializable {
    private int field1;
    private String field2;
    private AnotherClass anotherObject;

    // 构造函数、getters和setters方法省略
}

public class AnotherClass implements Serializable {
    private int value;

    // 构造函数、getters和setters方法省略
}

// 创建一个原始对象
ExampleClass originalObject = new ExampleClass();
originalObject.setField1(1);
originalObject.setField2("Test");
originalObject.setAnotherObject(new AnotherClass());

// 将原始对象深拷贝给另一个对象
ExampleClass deepCopyObject = null;
try {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(originalObject);
    oos.flush();
    oos.close();
    baos.flush();
    baos.close();
    byte[] serializedData = baos.toByteArray();
    ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
    ObjectInputStream ois = new ObjectInputStream(bais);
    deepCopyObject = (ExampleClass) ois.readObject();
    ois.close();
    bais.close();
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

4、对象克隆对象赋值给另一个对象

在Java中,可以使用对象克隆来将一个对象赋值给另一个对象。对象克隆是通过调用对象的clone()方法来创建一个与原始对象具有相同属性和值的新对象。为了使用对象克隆,需要实现Cloneable接口并重写clone()方法。下面是一个示例代码,演示了如何使用对象克隆将一个对象赋值给另一个对象:

public class ExampleClass implements Cloneable {
    private int field1;
    private String field2;
    private AnotherClass anotherObject;

    // 构造函数、getters和setters方法省略

    // 实现Cloneable接口并重写clone方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class AnotherClass implements Cloneable {
    private int value;

    // 构造函数、getters和setters方法省略

    // 实现Cloneable接口并重写clone方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

// 创建一个原始对象
ExampleClass originalObject = new ExampleClass();
originalObject.setField1(1);
originalObject.setField2("Test");
originalObject.setAnotherObject(new AnotherClass());

// 使用对象克隆将原始对象赋值给另一个对象
ExampleClass clonedObject = null;
try {
    clonedObject = (ExampleClass) originalObject.clone();
} catch (CloneNotSupportedException e) {
    e.printStackTrace();
}

5、通过getters和setters赋值

通过getters和setters赋值是一种常见的方法,用于将一个对象的属性值赋给另一个对象的相应属性。这种方法要求每个属性都有相应的getter和setter方法。下面是一个示例代码,演示了如何使用getters和setters赋值将一个对象的属性值赋给另一个对象:

public class ExampleClass {
    private int field1;
    private String field2;
    private AnotherClass anotherObject;

    public int getField1() {
        return field1;
    }

    public void setField1(int field1) {
        this.field1 = field1;
    }

    public String getField2() {
        return field2;
    }

    public void setField2(String field2) {
        this.field2 = field2;
    }

    public AnotherClass getAnotherObject() {
        return anotherObject;
    }

    public void setAnotherObject(AnotherClass anotherObject) {
        this.anotherObject = anotherObject;
    }
}

public class AnotherClass {
    private int value;

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

// 创建两个对象
ExampleClass object1 = new ExampleClass();
ExampleClass object2 = new ExampleClass();

// 使用getters和setters赋值
object2.setField1(object1.getField1());
object2.setField2(object1.getField2());
AnotherClass anotherObject = object1.getAnotherObject();
if (anotherObject != null) {
    object2.setAnotherObject(new AnotherClass());
    object2.getAnotherObject().setValue(anotherObject.getValue());
}