Part6:Java中的克隆
文章目录
Example01:Java对象的假克隆
- 对象的克隆是Java中的一项高级技术,获得与其相同的对象。
基本数据类型可以使用“=”来进行克隆,此时两个变量除了相等是没有任何关系的。而对于引用类型数据不能简单地使用“=”进行克隆,这与Java的内存空间使用有关。
Java将内存空间分成两块,即栈和堆。在栈中保存基本类型和引用变量;在堆中保存对象。对于引用变量而言,使用“=”将修改引用,而不是复制堆中的对象。此时两个引用变量将指向同一个对象。因此,如果一个变量对其修改则会改变另一个变量。
运行结果:
代码实现:
public class Employee {
private String name;
private int age;
//省略set()和get()方法
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
System.out.println("-----克隆之前:--------");
Employee employee1 = new Employee();
employee1.setName("hyn");
employee1.setAge(20);
System.out.println("员工1的信息:\n"+employee1);
System.out.println("-----克隆之后:--------");
Employee employee2 = employee1; //将employee1赋值给employee2
employee2.setName("azw");
employee2.setAge(21);
System.out.println("员工1的信息:\n"+employee1);
System.out.println("员工2的信息:\n"+employee2);
}
}
Example02:Java对象的浅克隆
在克隆对象时,如果对象的成员变量是基本数据类型,则使用浅克隆即可完成。如果对象的成员变量包括可变引用类型,则需要深克隆。
运行结果:
代码实现:
//Address.java
public class Address {
private String state; //所在国家
private String province; //所在省
private String city; //所在城市
public Address(String state, String province, String city) {
this.state = state;
this.province = province;
this.city &