在一个论坛上看到了一个关于深浅拷贝的文章,引用地址:
http://bbs.itcast.cn/thread-14646-1-2.html
概念:
(1)浅拷贝(浅克隆)被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然只指向原来的对象。
(2)深拷贝(深克隆)被复制对象的所有变量都含有与原来的对象相同的值,那些引用其他对象的变量将指向被复制过的新对象,深复制把要复制的对象所引用的对象都复制了一遍。
实现拷贝需要实现Cloneable接口并且重写clone方法。
(1)如果类型仅包含值类型(int,byte等类型)和string类型的数据成员,我们只要在clone方法中初始化一个新的对象,并调用超类的方法clone方法。
(2)如果自定义类型包含引用类型的数据成员,必须考虑clone方法是实现浅拷贝(shallow copy)还是深拷贝(deep copy)。
话不多说:贴代码:
package test.clone;
public class Person implements Cloneable{
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public Object clone() {
Person p=null;
try{
p=(Person) super.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return p;
}
}
package test.clone;
public class Student implements Cloneable{
Person person;
String klass;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getKlass() {
return klass;
}
public void setKlass(String klass) {
this.klass = klass;
}
@Override
public Object clone() {
Student obj = null;
try {
obj = (Student) super.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
obj.person=(Person)person.clone();//如果没有这句则属于浅拷贝;读者可以自行测试
return obj;
}
}
package test.clone;
public class TestClone {
public static void main(String[] args) {
Student s1=new Student();
Person p1=new Person();
p1.setName("Student1");
p1.setAge("21");
s1.setKlass("class1");
s1.setPerson(p1);
Student s2=(Student) s1.clone();
s2.getPerson().setName("Student2");
System.out.println(s1.getPerson().getName()+"------克隆之前的Student1");
System.out.println(s2.getPerson().getName()+"------克隆之后的Student2");
}
}
运行结果:
Student1------克隆之前的Student1
Student2------克隆之后的Student2
分享到:
相关推荐
浅谈Java优势,关于java优势......
在现代软件开发中,Java语言和MySQL数据库的结合使用是技术领域中一个非常普遍且重要的课题。Java作为一门广泛应用于商业、企业级应用开发的编程语言,其稳定性和跨平台能力使其在软件开发领域占据着举足轻重的地位...
深浅拷贝是 JavaScript 中一种常用的数据拷贝方式,分为浅拷贝和深拷贝两种。浅拷贝是指复制对象的引用,而不是复制对象本身,而深拷贝是指完全复制对象。 浅拷贝 浅拷贝是指复制对象的引用,而不是复制对象本身。...
总结而言,Java软件测试是软件测试行业中的一个重要分支,随着Java语言在各类应用中的广泛使用,Java软件测试的研究和实践也在不断深入。要提高软件质量,就必须重视软件测试,尤其是Java软件测试的研究和应用,并...
在Java编程语言中,类与对象是核心概念,它们构成了面向对象编程的基础。这篇博文将深入探讨这两个概念,以及它们如何...通过阅读“浅谈Java的类与对象”这篇文档,你将能更深入地了解这些核心概念,提升你的编程技能。
浅谈JAVA技术.pdf
ios中深浅拷贝的讲解,通俗移动。深浅拷贝是ios开发人员面试经常会被问到的知识点,看了本文档,相信你回答ios中的深浅拷贝有不一样的认识。
在Java编程中,对象的复制是一个常见的操作,主要分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。本篇文章将详细讲解Java中的浅拷贝,并通过一个完整的源码示例进行性能比较。 浅拷贝是创建一个新的对象,然后...
浅谈Java任务调度.pdf
标题中的“浅谈Java字符串Java开发Java经验技巧共11页”表明这是一份关于Java编程,特别是关于Java字符串处理的深度技术文档。在Java中,字符串是编程中经常遇到的基本数据类型,对于任何Java开发者来说,理解和掌握...
"浅谈JAVA语言.pdf" 本文将从Java语言的起源开始,分析Java语言与传统语言的差异,并阐述Java语言为什么能够成为世界上最流行的编程语言的原因。同时,本文还将结合Java语言的特点与技术的发展,探讨Java语言在编译...
### 浅谈Java中的四个核心概念 随着信息技术的飞速发展与互联网的普及,Java作为一门面向对象的、跨平台的编程语言,在软件开发领域占据了举足轻重的地位。Java不仅仅是一门语言,它更是一个庞大的技术平台。为了更...
本文实例讲述了JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)。分享给大家供大家参考,具体如下: 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。 浅拷贝 只是拷贝了基本类型的数据,而引用类型...
浅谈Java技术 (1).pdf
在iOS开发中,深拷贝和浅拷贝是两个重要的概念,主要涉及到对象复制时内存管理的问题。这两个术语经常在讨论Objective-C中的`NSCopying`和`NSMutableCopying`协议时出现,以及Swift中的`Copyable`和`MutableCopyable...
总结来说,Java的深浅克隆是对象复制的重要手段。浅克隆适用于字段不包含可变对象或者对象的深层结构不需要独立的情况,而深克隆则在需要完整复制对象及其嵌套对象时更为适用。理解并正确使用这两种克隆方式对于编写...
浅谈Java程序设计在线开放课程.pdf
"浅谈Java的发展及前景" 经过对文件的分析,我们可以从多个角度来谈论Java的发展及前景。 首先,从Java的发展历史来看,Java是由Sun Microsystems公司于1995年5月推出的面向对象的程序设计语言。Java的出现标志着...