哪些网站可以做设计软件,大健康网站怎么样做,制作大型网站开发,WordPress最好用编辑器在java中如何对对象进行拷贝呢#xff1f;我们可以使用Object类中的clone方法。
一、浅拷贝
在使用clone方法对对象进行拷贝的时候#xff0c;需要注意#xff1a;
1.需要重写clone方法#xff1b;
2.clone方法的返回值是Object类#xff0c;需要强制类型转化#xf…在java中如何对对象进行拷贝呢我们可以使用Object类中的clone方法。
一、浅拷贝
在使用clone方法对对象进行拷贝的时候需要注意
1.需要重写clone方法
2.clone方法的返回值是Object类需要强制类型转化
3.使用clone方法必须先实现Cloneable接口
//深克隆
public class Test {//对抛出的异常进行处理public static void main(String[] args)throws CloneNotSupportedException {Person personnew Person(zhangsan,10);Person person1(Person)person.clone();System.out.println(修改前person.m.money);System.out.println(修改前person1.m.money);person1.m.money99.9;System.out.println(修改后person.m.money);System.out.println(修改后person1.m.money);//对person1.m.money修改后person.m.money也被修改}
}
class Money {public double money9.9;
}
//想要进行拷贝的类必须实现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 mnew Money();Overridepublic String toString() {return Person{ age age , name name \ };}//重写clone方法protected Object clone()throws CloneNotSupportedException{return super.clone();}
}
运行结果
可以看到当我们将person1.m.money修改为99.9是 person.m.money也被修改为99.9这是为什么呢
原因是我们只对person 进行了拷贝而没有对m进行拷贝因此person1和person中的m为同一个引用它们指向同一个对象像这种不完全的拷贝方式叫做浅拷贝。
二、深拷贝
如果想将上面的对象m也拷贝一份也很简单与拷贝person类似。
//深克隆
public class Test {public static void main(String[] args)throws CloneNotSupportedException {Person personnew Person(zhangsan,10);Person person1(Person)person.clone();System.out.println(修改前person.m.money);System.out.println(修改前person1.m.money);person1.m.money99.9;System.out.println(修改后person.m.money);System.out.println(修改后person1.m.money);}
}
//Money类也实现Cloneable接口对clone方法进行重写
class Money implements Cloneable{public double money9.9;protected Object clone()throws CloneNotSupportedException{return super.clone();}
}
//想要进行拷贝的类必须实现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 mnew Money();Overridepublic String toString() {return Person{ age age , name name \ };}protected Object clone()throws CloneNotSupportedException{//clone的返回值为Object类因此需要强制类型转换Person tmp(Person) super.clone();//调用Monmey类中重写的clone方法对m进行拷贝tmp.m(Money) this.m.clone();return tmp;}
}
运行结果