java 浅拷贝代码类
时间: 2024-06-12 17:02:30 浏览: 8
在Java中,浅拷贝是指创建一个新的对象,并将原有对象的所有非引用类型的数据(如基本数据类型和对象的引用)复制到新对象中。如果原对象中包含引用类型的对象,那么新对象中只是复制了这些引用,而不是它们所指向的实际对象。浅拷贝通常用于快速复制对象,但可能引发一些预期之外的问题,比如修改子对象会影响原对象。
以下是一个简单的浅拷贝的代码示例,使用`Cloneable`接口和`Object`类的`clone()`方法:
```java
public class Person implements Cloneable {
private String name;
private Address address;
// 构造函数和getter/setter省略
public Person shallowCopy() {
try {
return (Person) this.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Failed to clone object", e);
}
}
}
class Address {
private String street;
// 其他属性和getter/setter省略
}
// 使用浅拷贝
public void modifyShallowCopy(Person person) {
person.getAddress().setStreet("New Address"); // 修改子对象
}
public static void main(String[] args) {
Person original = new Person();
Address address = new Address();
address.setStreet("Original Address");
original.setName("John");
original.setAddress(address);
Person copy = original.shallowCopy(); // 假设copy不会被修改
// 修改原始对象的地址
address.setStreet("Modified Address");
System.out.println("Original: " + original.getName() + ", " + original.getAddress().getStreet());
System.out.println("Copy: " + copy.getName() + ", " + copy.getAddress().getStreet()); // 会看到两者地址都变了
}
```