把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制。
-
克隆对象
方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。
1.重写Object中的clone方法
-
浅克隆
protected Object clone() throws CloneNotSupportedException { return super.clone(); }
深克隆
2.让javabean类实现cloneable接口
3.创建对象并调用clone
User user = new User("张三",18,"男"); User user2 = (User)user.clone();
-
-
浅克隆
将对象内部的基本数据类型和引用数据类型全部拷贝过来。
重写clone方法
protected Object clone() throws CloneNotSupportedException { return super.clone(); }
执行以下代码
int []date ={1,2,3,4,5,6,7,8,9,10}; User user = new User("张三",18,"男",date); User user2 = (User)user.clone(); int[] arr = user2.getDate(); arr[0]=100; System.out.println(user); System.out.println(user2);
运行结果如下
显然,该方法是浅克隆
-
深克隆
基本数据类型拷贝过来,引用数据类型会创建新的。
重写clone方法
protected Object clone() throws CloneNotSupportedException { int[] date = this.date; int[] newDate = new int[date.length]; for (int i = 0; i < date.length; i++) { newDate[i] = date[i]; } User u = (User)super.clone(); u.date = newDate; return u; }
执行以下代码
int []date ={1,2,3,4,5,6,7,8,9,10}; User user = new User("张三",18,"男",date); User user2 = (User)user.clone(); int[] arr = user2.getDate(); arr[0]=100; System.out.println(user); System.out.println(user2);
运行结果如下
显然,该方法是深克隆
但是这种方法太繁琐了,我们可以通过导入第三方工具gson来快速进行深克隆
Gson 是 Google 提供的一个用来在 Java 对象和 JSON 数据之间进行映射的 Java 库。它允许你将 Java 对象转换为它们对应的 JSON 表示形式
通过引入Maven依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency>
然后执行以下代码
int []date ={1,2,3,4,5,6,7,8,9,10}; User user = new User("张三",18,"男",date); Gson gson=new Gson(); //把对象变成一个字符串 String json = gson.toJson(user); //再把字符串变回对象 User user2=gson.fromJson(json,User.class); int[] arr = user.getDate(); arr[0]=100; System.out.println(user); System.out.println(user2);
运行结果如下
这样就优雅的完成了深克隆
标签:Java,克隆,int,clone,学习,user,date,user2,User From: https://blog.csdn.net/2301_81288466/article/details/144013659