java把一个对象复制到一个新的对象中,怎么写?
时间: 2024-02-13 15:06:31 浏览: 19
Java中复制一个对象到一个新的对象中有两种方式,分别是浅拷贝和深拷贝。
1. 浅拷贝
浅拷贝表示只复制对象的引用,不复制对象本身。这意味着如果原始对象中的某个属性被修改,拷贝对象中相应属性也会被修改,因为它们引用同一个对象。
实现浅拷贝可以使用Java提供的Cloneable接口和clone()方法,具体实现如下:
```java
public class Person implements Cloneable {
private String name;
private int age;
// getter and setter methods
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
```
使用时,可以通过调用对象的clone()方法来实现浅拷贝:
```java
Person person1 = new Person();
person1.setName("张三");
person1.setAge(20);
Person person2 = (Person) person1.clone();
System.out.println(person2.getName()); // 输出 "张三"
```
2. 深拷贝
深拷贝表示复制对象本身,而不是仅复制引用。这意味着如果原始对象中的某个属性被修改,拷贝对象中相应属性不会被修改,因为它们引用不同的对象。
实现深拷贝可以使用Java提供的序列化(Serialization)和反序列化(Deserialization)机制,具体实现如下:
```java
public class Person implements Serializable {
private String name;
private int age;
// getter and setter methods
public Person deepClone() 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 (Person) ois.readObject();
}
}
```
使用时,可以通过调用对象的deepClone()方法来实现深拷贝:
```java
Person person1 = new Person();
person1.setName("张三");
person1.setAge(20);
Person person2 = person1.deepClone();
System.out.println(person2.getName()); // 输出 "张三"
```
需要注意的是,要实现深拷贝,对象中的所有属性都必须支持序列化和反序列化。如果有属性不支持序列化和反序列化,需要手动实现深拷贝。