java中深拷贝和浅拷贝的区别
来源:互联网 发布:mac linux双系统 编辑:程序博客网 时间:2024/05/16 13:07
今天上课学到了Cloneable接口,自然我们在使用clone()方法的时候,涉及到了java中的浅拷贝和深拷贝的问题。下面通过在网上看一下资料,做一个小小的总结。
从最后一个结果输出false,我们可以知道,这两个时间对象并不是同一个引用变量,所以深拷贝不仅实现了p1对象的基本数据类型的拷贝,还实现了引用数据类型的拷贝。
(1)浅拷贝
浅拷贝是指对象中基本数据类型得到拷贝,而引用数据类型并没有拷贝。看下面一段代码:
public class Person implements Cloneable{
private int age = 20;
private String name = "fangleijiang";
private Date date;
public int getAge()
{
return age;
}
public void setAge(int age)
{ this.age = age; }
public String getName()
{ return name; }
public void setName(String name)
{ this.name = name; }
public Date getDate()
{ return date; }
public void setDate(Date date)
{ this.date = date; }
public static void main(String[] args) throws CloneNotSupportedException {
Person p1 = new Person();
Date date = new Date();
p1.setDate(date);
Person p2 = (Person) p1.clone(); //克隆对象
System.out.println(p1.getAge());
System.out.println(p2.getAge());
System.out.println(p1.getDate());
System.out.println(p2.getDate());
if(p1.getDate()==p2.getDate())
{
System.out.println("true");
}
else{
System.out.println("false");
}
}
}
输出结果
从结果中我们可以看出,两个对象p1和p2的年龄和日期的值都是一样的,但是当我们比较的两个日期的内存地址的时候,发现输出结果是true,这说明,p2对象只是拷贝了date的值,并没有拷贝对象p1里面的date对象。我们可以通过下图来表示
:
(2)深拷贝
相对于浅拷贝来说,既实现了对象中基本数据类型的拷贝,也实现了引用数据类型的拷贝。
看下面一段测试程序
public static void main(String[] args) throws CloneNotSupportedException {
Person p1 = new Person();
Date date = new Date();
p1.setDate(date);
Person p2 = (Person) p1.clone(); //克隆对象
p2.setDate((Date)p1.getDate().clone());//注意这是和浅拷贝不同的地方
System.out.println(p1.getAge());
System.out.println(p2.getAge());
System.out.println(p1.getDate());
System.out.println(p2.getDate());
if(p1.getDate()==p2.getDate())
{
System.out.println("true");
}
else{
System.out.println("false");
}
}
输出结果如下图
从最后一个结果输出false,我们可以知道,这两个时间对象并不是同一个引用变量,所以深拷贝不仅实现了p1对象的基本数据类型的拷贝,还实现了引用数据类型的拷贝。
我们可以通过下图来表示深拷贝的原理:
本人初学者,如有说的不正确的地方,欢迎各位给我留言。
- java中深拷贝和浅拷贝的区别
- java中浅拷贝和深拷贝的区别
- java中深拷贝和浅拷贝的区别
- java中深拷贝和浅拷贝区别
- Java中浅拷贝与深拷贝的区别
- C++中浅拷贝和深拷贝的区别
- iOS中浅拷贝和深拷贝的区别
- java深拷贝和浅拷贝的区别
- java深拷贝和浅拷贝的区别(转载)
- Java基础-深拷贝和浅拷贝的区别
- 深拷贝和浅拷贝的区别
- 浅拷贝和深拷贝的区别
- 深拷贝和浅拷贝的区别
- 深拷贝和浅拷贝的区别
- 深拷贝和浅拷贝的区别
- 深拷贝和浅拷贝的区别
- 浅拷贝和深拷贝的区别?
- 深拷贝和浅拷贝的区别
- 求最大公约数和最小公倍数的最简单 高效的算法
- std stl
- Windows Azure and Office 365
- java关键字new和newInstance()的区别
- 让你的代码有个归宿:Git学习及Emacs之magit
- java中深拷贝和浅拷贝的区别
- poj 1185 炮兵阵地
- Android学习篇章25-Intentc传输数据Bundle-Parcelable-Serializable
- MD5加密算法,在网上看了看,整理了一段小代码,以后直接拿来用
- 虚拟机网络设置详解
- @Component @Service @Controller @Repository注解使用
- Linux 进程调度机制(1)
- 2013上半年智能电视市场调研报告分析
- OC语法之NSDictionary