級(jí)a做爰片免費(fèi)視網(wǎng)站看看谷歌seo培訓(xùn)
在java中如何對(duì)對(duì)象進(jìn)行拷貝呢?我們可以使用Object類中的clone方法。
一、淺拷貝
在使用clone方法對(duì)對(duì)象進(jìn)行拷貝的時(shí)候,需要注意:
1.需要重寫clone方法;
2.clone方法的返回值是Object類,需要強(qiáng)制類型轉(zhuǎn)化;
3.使用clone方法必須先實(shí)現(xiàn)Cloneable接口;
//深克隆
public class Test {//對(duì)拋出的異常進(jìn)行處理public static void main(String[] args)throws CloneNotSupportedException {Person person=new Person("zhangsan",10);Person person1=(Person)person.clone();System.out.println("修改前:"+person.m.money);System.out.println("修改前:"+person1.m.money);person1.m.money=99.9;System.out.println("修改后:"+person.m.money);System.out.println("修改后:"+person1.m.money);//對(duì)person1.m.money修改后,person.m.money也被修改}
}
class Money {public double money=9.9;
}
//想要進(jìn)行拷貝的類必須實(shí)現(xiàn)Cloneable接口
@SuppressWarnings("ALL")
class Person implements Cloneable{public int age;public String name;public Person(String name,int age) {this.age = age;this.name = name;}Money m=new Money();@Overridepublic String toString() {return "Person{" +"age=" + age +", name='" + name + '\'' +'}';}//重寫clone方法protected Object clone()throws CloneNotSupportedException{return super.clone();}
}
運(yùn)行結(jié)果:
可以看到當(dāng)我們將person1.m.money修改為99.9是,?person.m.money也被修改為99.9,這是為什么呢?
原因是我們只對(duì)person?進(jìn)行了拷貝,而沒(méi)有對(duì)m進(jìn)行拷貝,因此person1和person中的m為同一個(gè)引用,它們指向同一個(gè)對(duì)象,像這種不完全的拷貝方式叫做淺拷貝。
二、深拷貝
如果想將上面的對(duì)象m也拷貝一份,也很簡(jiǎn)單,與拷貝person類似。
//深克隆
public class Test {public static void main(String[] args)throws CloneNotSupportedException {Person person=new Person("zhangsan",10);Person person1=(Person)person.clone();System.out.println("修改前:"+person.m.money);System.out.println("修改前:"+person1.m.money);person1.m.money=99.9;System.out.println("修改后:"+person.m.money);System.out.println("修改后:"+person1.m.money);}
}
//Money類也實(shí)現(xiàn)Cloneable接口,對(duì)clone方法進(jìn)行重寫
class Money implements Cloneable{public double money=9.9;protected Object clone()throws CloneNotSupportedException{return super.clone();}
}
//想要進(jìn)行拷貝的類必須實(shí)現(xiàn)Cloneable接口
@SuppressWarnings("ALL")
class Person implements Cloneable{public int age;public String name;public Person(String name,int age) {this.age = age;this.name = name;}Money m=new Money();@Overridepublic String toString() {return "Person{" +"age=" + age +", name='" + name + '\'' +'}';}protected Object clone()throws CloneNotSupportedException{//clone的返回值為Object類,因此需要強(qiáng)制類型轉(zhuǎn)換Person tmp=(Person) super.clone();//調(diào)用Monmey類中重寫的clone方法,對(duì)m進(jìn)行拷貝tmp.m=(Money) this.m.clone();return tmp;}
}
運(yùn)行結(jié)果:?