为了账号安全,请及时绑定邮箱和手机立即绑定

我的clone()方法怎么不好使啊?求高手指点一下哈

我的clone()方法怎么不好使啊?求高手指点一下哈

MYYA 2023-04-23 18:14:04
public class ArrayTssst {public static void main(String[] args){// int[] a = new int[]{1,15,3};/*int[] b = a;System.out.println(b[1]);*//* int[] b = new int[3];System.arraycopy(a, 0, b, 0, a.length); b[1] =55;for(int i=0;i<a.length;i++){System.out.println(a[i]);}*/Poin[] p1 = new Poin[]{new Poin(1,1),new Poin(2,2),new Poin(3,3)};Poin[] p2 = new Poin[3];/*System.arraycopy(p1, 0, p2, 0, p1.length);p2[2].x = 44;p2[2].y = 33;for(int i=0;i<p1.length;i++){System.out.println(p1[i]);}*/p2 = p1.clone();p2[2].x = 44;p2[2].y = 33;for(int i=0;i<p1.length;i++){System.out.println(p1[i]);}}}class Poin implements Cloneable{int x;int y;Poin(int x,int y){this.x = x;this.y = y;}public String toString(){return "x = "+x+", y = "+y;}public Object clone(){Object o=null;try {o = super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return o;}}
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

克隆分为浅克隆和深克隆,如果直接使用继承Object的克隆,则为浅克隆。
你想达到的效果是深克隆,如果你想实现深克隆,则需要重写clone方法

打个比方来讲深克隆和浅克隆。就用一筐苹果来讲,深克隆就是我们复杂了一筐苹果(一个筐和筐里的苹果),而浅克隆则只是复杂了一个筐,苹果则不能直接的反应在筐里。这个列子不是很恰当,不过你可以这么去理解深克隆和浅克隆。

查看完整回答
反对 回复 2023-04-27
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

对于数组这样的集合,如果要克隆的话,需要遍历里面的元素逐一克隆,这个是深克隆。还有一个方法就是用ObjectOutputStream 和ObjectInputStream也可以用来进行深克隆。

查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信