java对象复制
2014-01-01 09:46
295 查看
一,a和b都指向同一个对象,改变其中一个另一个也会改变
二,继承Cloneable接口,实现clone方法,实现浅拷贝
三,如果对象中有变量指向别的对象,成员变量指向的对象仍然是同样的
四,需要对成员变量指向对象的类继承拷贝接口,修改Human类复制方法
package com.ciaos; class Human{ public Human(String string, int i) { // TODO Auto-generated constructor stub name = string; age = i; } String name; int age; } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub /* int num[][] = {{1,2,3,4},{5,6,7,8},{2,3,4,5},{4,5,6,7}}; for(int x[]:num){ for(int y:x){ System.out.print(y); } }*/ Human a = new Human("ciaos",26); System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26 Human b = a; b.name = "stone"; System.out.println("a:"+a.name+" "+a.age);//a:stone 26 System.out.println("b:"+b.name+" "+b.age);//b:stone 26 } }
二,继承Cloneable接口,实现clone方法,实现浅拷贝
package com.ciaos; class Human implements Cloneable{ public Human(String string, int i) { // TODO Auto-generated constructor stub name = string; age = i; } String name; int age; public Object clone(){ Human h = null; try { h = (Human)super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return h; } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Human a = new Human("ciaos",26); System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26 Human b = (Human)a.clone(); b.name = "stone"; System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26 System.out.println("b:"+b.name+" "+b.age);//b:stone 26 } }
三,如果对象中有变量指向别的对象,成员变量指向的对象仍然是同样的
package com.ciaos; class Addr{ public Addr(String country2, String city2) { // TODO Auto-generated constructor stub country = country2; city = city2; } String country; String city; } class Human implements Cloneable{ public Human(String string, int i, String country, String city) { // TODO Auto-generated constructor stub name = string; age = i; addr = new Addr(country,city); } String name; int age; Addr addr; public Object clone(){ Human h = null; try { h = (Human)super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return h; } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Human a = new Human("ciaos",26,"china","shenzhen"); System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen Human b = (Human)a.clone(); b.name = "stone"; b.addr.city = "shanghai"; System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shanghai System.out.println("b:"+b.name+" "+b.age+" "+b.addr.country+" "+b.addr.city);//b:stone 26 china shanghai } }
四,需要对成员变量指向对象的类继承拷贝接口,修改Human类复制方法
package com.ciaos; class Addr implements Cloneable{ public Addr(String country2, String city2) { // TODO Auto-generated constructor stub country = country2; city = city2; } String country; String city; public Object clone(){ Addr a = null; try { a = (Addr)super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return a; } } class Human implements Cloneable{ public Human(String string, int i, String country, String city) { // TODO Auto-generated constructor stub name = string; age = i; addr = new Addr(country,city); } String name; int age; Addr addr; public Object clone(){ Human h = null; try { h = (Human)super.clone(); h.addr = (Addr)this.addr.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return h; } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Human a = new Human("ciaos",26,"china","shenzhen"); System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen Human b = (Human)a.clone(); b.name = "stone"; b.addr.city = "shanghai"; System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen System.out.println("b:"+b.name+" "+b.age+" "+b.addr.country+" "+b.addr.city);//b:stone 26 china shanghai } }
相关文章推荐
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java中对象的深复制(深克隆)和浅复制(浅克隆)
- Java 简述对象克隆(复制)
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java对象复制和数组复制(拷贝)
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- java 对象之间属性值复制
- java中复制对象通过反射或序列化
- java对象复制举例
- 关于java的ArraryList中赋值——不是复制,需要new新的对象,才能加入
- JAVA对象属性复制
- java对象的一些基本操作,复制对象,判断是否为基本数据类型等
- Java如何复制对象
- java 反射机制实现对象复制
- Java -- 利用反射实现对象之间相同属性复制BeanUtil
- Java对象深复制、浅复制
- 深入java对象复制的分析
- java对象拷贝和复制
- Java 中对象引用与复制
- 转载---Java集合对象的深度复制与普通复制