一个关于理解浅拷贝与深拷贝的小程序
2016-11-13 00:23
337 查看
浅拷贝基本数据类型值传递,引用类型是引用传递。
深拷贝则生成新的实例对象。
这里的深拷贝是使用了copy constructor方式。
public class Person {
String name;
private String sex;
private int age;
public Person(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public Person(Person p){ //拷贝构造方法,复制对象
this.name = p.name;
this.sex = p.sex;
this.age = p.age;
}
public void setAge(int m){
this.age = m;
}
public String toString(){
return name +" "+ sex+" "+ age;
}
}
public class Asian {
private String skin;
Person person;
public Asian(String skin,Person person){
this.skin = skin;
this.person = person; //引用赋值
}
public Asian(Asian asian){ //拷贝构造方法,复制对象
this(asian.skin,asian.person);
}
public String toString(){
return skin+" "+ person;
}
public static void main(String[] args){
Person p1 = new Person("shaojianhua","mam",23);
Person p2 = new Person(p1);
p2.setAge(24);
StdOut.println(p1);
StdOut.println(p2);
Asian a1 = new Asian("yellow",new Person("shaojianhua","mam",23));
Asian a2 = new Asian(a1);
a2.person = new Person(a1.person);
a2.person.setAge(24);
/*Asian a2 = new Asian(a1);
a2.person.setAge(24);*///a2、a1相同引用
StdOut.println(a1);
StdOut.println(a2);
}
}
深拷贝则生成新的实例对象。
这里的深拷贝是使用了copy constructor方式。
public class Person {
String name;
private String sex;
private int age;
public Person(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public Person(Person p){ //拷贝构造方法,复制对象
this.name = p.name;
this.sex = p.sex;
this.age = p.age;
}
public void setAge(int m){
this.age = m;
}
public String toString(){
return name +" "+ sex+" "+ age;
}
}
public class Asian {
private String skin;
Person person;
public Asian(String skin,Person person){
this.skin = skin;
this.person = person; //引用赋值
}
public Asian(Asian asian){ //拷贝构造方法,复制对象
this(asian.skin,asian.person);
}
public String toString(){
return skin+" "+ person;
}
public static void main(String[] args){
Person p1 = new Person("shaojianhua","mam",23);
Person p2 = new Person(p1);
p2.setAge(24);
StdOut.println(p1);
StdOut.println(p2);
Asian a1 = new Asian("yellow",new Person("shaojianhua","mam",23));
Asian a2 = new Asian(a1);
a2.person = new Person(a1.person);
a2.person.setAge(24);
/*Asian a2 = new Asian(a1);
a2.person.setAge(24);*///a2、a1相同引用
StdOut.println(a1);
StdOut.println(a2);
}
}
相关文章推荐
- 一个简单关于学生成绩管理的C++程序代码,但是对于拷贝析构函数目前还是不知其作用何在
- 菜鸟发问,请各位不吝赐教啊! 关于一个简单的程序的理解问题
- >>关于.NET CF 的一些知识——启动同一个程序的多个拷贝
- 关于程序,进程,线程。程序个人理解:应用程序是一个车间,进程是一条生产线,线程是机器
- 【程序人生】:关于招聘的一个理解
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 关于一个多线程、断点续传的FTP服务程序!
- 发现一个很奇怪的现象--关于VB程序的内存占用
- 基于AjaxHelper0.41的相册范例程序演示及一个关于博客园的功能建议
- 关于javascript程序内存占用的一个有趣的实验
- 关于继承的一个小程序
- 经过测试的 可以使用的远程注入代码!!!!!我的VC里面缺少一个stdafx.h需要拷贝一个到程序
- 一个实用的Delphi屏幕拷贝程序的设计
- 390开发实用技术: 重拳出击,CICS联机程序开发新手必看---一个典型的CICS程序,所有完备功能包括上下翻屏,增加/编辑/删除/拷贝纪录等
- JAVA 程序中如何拷贝一个目录下的文件及子目录到另一个目录,如何获取系统环境变量等...
- 最近做毕业设计发现市场上的Delphi书中关于TArrayField的一个错误理解,这里现简单的提一下以后有时间在好好的研究一下
- jbuilder2006中web程序关于jdk版本的一个问题
- 一个关于日历的JSP程序!
- 一个关于日历的JSP程序!
- 关于正在学习的一个项目的理解(1)