文章目录
一、问题:浅复制和深复制有什么区别
1、浅复制(Shallow Clone)和 深复制(Deep Clone)的概念
1)浅复制(Shallow Clone)
概念
被复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制基本数据类型,而不复制它所引用的对象。
2)深复制(Deep Clone)
概念:
被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量
2、原因
1)主要原因
- 是因为Java在处理
基本数据类型
(例如int、char、double
等)时,都是采用按值传递(传递的是输入参数的复制)
的方式执行。 除此之外的其他类型
都是按引用传递(传递的是对象的一个引用)的方式执行
。对象除了在函数调用时是引用传递,在使用“=”赋值时也采用引用传递
。
2)先用代码进行一下简单的演示
package com.example.clone;
public class SimpleTest {
public static void main(String[] args) {
Simple origin = new Simple();
origin.setA(10);
origin.setName("origin");
Simple copy = origin;
System.out.println("第一次输出origin:"+origin);
// 这里修改一下copy的值
copy.setA(20);
copy.setName("copy");
System.out.println("第二次输出origin:"+origin);
}
}
class Simple{
private int a;
private String name;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getName()