java对象复制
一,a和b都指向同一个对象,改变其中一个另一个也会改变
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 对象的一共有 3 种复制对象的方式. 1.直接赋值 (引用复制 ),此种复制方式比较常用. 诸如 A a = b ; a 是直接复制了b的引用 ,也就是说它俩指向的是同一个对象. 此时 ...
- JAVA对象转换JSON
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...
- java中复制对象通过反射或序列化
在使用缓存读取数据后修改发现缓存被修改.于是找了下复制对象的方法. 关于对象克隆 按我的理解,对象是包含引用+数据.通常变量复制都是将引用传递过去.比如: Person p1 = new Person ...
- Java反射 - 2(对象复制,父类域,内省)
为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...
- Java——对象的复制、克隆、序列化
原创作者: https://blog.csdn.net/lmb55/article/details/78277878对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; ...
- java对象实现深复制的方法
p2 = (Person)org.apache.commons.lang3.ObjectUtils.cloneBean(p); Person p2 = new Person(); p2 = (Pers ...
- Java对象和集合的拷贝/克隆/复制
昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作.但是他对新的Bean操作后,会影响旧的Bean的值.当听到这个问题的时候,我第一反应就是他的拷贝方法 ...
- java对象克隆复制
原文链接:https://blog.csdn.net/ztchun/article/details/79110096 自己先简单描述总结一下:当想要将一个对象中已有的值直接给另外一个对象的时候,其实并 ...
- java对象拷贝和复制
参考文章:http://blog.csdn.net/XIAXIA__/article/details/41652057 解决问题:深拷贝.浅拷贝 和普通的对象赋值有什么区别? 对象复制 例如:Pers ...
随机推荐
- realloc,c语言
realloc #include <stdlib.h> main() { char* ptr=NULL; char* ptr2=NULL; ptr = malloc(); printf(& ...
- Dockerfile
http://blog.csdn.net/jiashiwen/article/details/48806243 一:如何使用: Dockerfile 用来创建一个自定义的image,包含了用户指定的软 ...
- Python GUI开发环境的搭建
原文:Python GUI开发环境的搭建 最近对Python的开发又来了兴趣,对于Python的开发一直停留在一个表面层的认识,玩的部分比较大. Python的入手简单,语法让人爱不释手,在网络通信方 ...
- Android TextWatcher应用实例
(1)使用TextWathcer限制输入字符个数布局中EditText在android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输入框中 ...
- thrift之初体验
hrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, ...
- Azure Traffic Manager 现可与 Azure 网站集成!
编辑人员注释:本文章由 WindowsAzure 网站团队高级专家级工程师 Jim Cheshire撰写. AzureTraffic Manager 已经推出有一段时间,这是一种跨多个区域管理网 ...
- Codeforces Round#2
A. Winner 题目大意:一些人在玩游戏,给出n次某人获得的分数,现在请计算出胜者,如果不止一个最高分,则取最先达到该分数的人. 题解:模拟得分过程,首先计算出最高分,然后获取先到达或超过最高分的 ...
- What Is Your Grade?(水,排序)
What Is Your Grade? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 【D3.V3.js系列教程】--(十二)坐标尺度
[D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales ...
- xml 充当简易数据库
后台: 写入节点 public static void Update(string path, string node, string attribute, string value) { try { ...