对象拷贝问题
来源:互联网 发布:淘宝刷手退款能报警 编辑:程序博客网 时间:2024/06/10 19:03
摘自《编写高质量代码 改善java程序员的151个建议》
对象拷贝的规则如下:
(1)基本类型
如果是变量是基本类型,则拷贝其值,比如int,float等
(2)对象
如果变量是一个实例对象,则拷贝地址引用,也就是说新拷贝出的对象与原有对象共享该实例变量
(3)string字符串
这个比较特殊,拷贝的是一个地址,是个引用,但是在修改时,它会从字符串池中重新生成新的字符串,原有的字符串对象保持不变,我们可以认为string是一个基本类型。
public class Test {public static void main(String[] args) {Person father = new Person("父亲", null);Person son1 = new Person("yi", father);Person son2 = son1.clone();son2.setName("er");son2.getFather().setName("gandie");System.out.println(son1.getName()+"de father="+son1.getFather().getName());System.out.println(son2.getName()+"de father="+son2.getFather().getName());}}
class Person implements Cloneable {private String name;private Person father;public Person(String name, Person father) {this(name);this.father = father;}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person getFather() {return father;}public void setFather(Person father) {this.father = father;}@Overrideprotected Person clone() {Person p = null;try {p = (Person) super.clone();p.setFather(new Person(p.getFather().getName()));//实现深拷贝,保证拷贝出来的对象自成一体,不受母体的影响} catch (CloneNotSupportedException e) {}return p;}}
0 0
- 对象拷贝问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- java对象深拷贝问题
- JAVA对象拷贝(copy)问题
- JS对象浅拷贝与深拷贝问题实践
- 类对象的复制和拷贝问题
- 关于OC对象拷贝的问题
- js对象的深拷贝问题
- 面向对象编程中的对象的拷贝问题
- 对象拷贝
- C#中如何实现对象的深拷贝问题
- 返回临时对象时的拷贝构造函数问题
- C#中List<T>对象的深度拷贝问题
- C#中List<T>对象的深度拷贝问题
- C#中List<T>对象的深度拷贝问题
- 异常类型:Myeclipse10将web项目打成war包时出现security alert:integrity check error
- C程序代码中内嵌as汇编(二、占位符)
- bat 重命名文件
- WiFi-Audio需要实现的功能简介
- 工作杂谈之:增量更新
- 对象拷贝问题
- UIAlertView的使用,以及自动消失
- 1031.Hello World for U
- 数据库备份操作,早就不用SQLDMO了
- com.itextpdf.text.html.simpleparser.CellWrapper cannot be cast to com.itextpdf.text.Paragraph
- Oracle中job的实例
- ARM Fundamentals: Introduction to understanding ARM processors
- Android滑动屏幕
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行