一,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对象复制的更多相关文章

  1. Java 对象复制

    Java 对象的一共有 3 种复制对象的方式. 1.直接赋值 (引用复制 ),此种复制方式比较常用. 诸如 A  a = b ;  a 是直接复制了b的引用 ,也就是说它俩指向的是同一个对象. 此时 ...

  2. JAVA对象转换JSON

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...

  3. java中复制对象通过反射或序列化

    在使用缓存读取数据后修改发现缓存被修改.于是找了下复制对象的方法. 关于对象克隆 按我的理解,对象是包含引用+数据.通常变量复制都是将引用传递过去.比如: Person p1 = new Person ...

  4. Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

  5. Java——对象的复制、克隆、序列化

    原创作者: https://blog.csdn.net/lmb55/article/details/78277878对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; ...

  6. java对象实现深复制的方法

    p2 = (Person)org.apache.commons.lang3.ObjectUtils.cloneBean(p); Person p2 = new Person(); p2 = (Pers ...

  7. Java对象和集合的拷贝/克隆/复制

    昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作.但是他对新的Bean操作后,会影响旧的Bean的值.当听到这个问题的时候,我第一反应就是他的拷贝方法 ...

  8. java对象克隆复制

    原文链接:https://blog.csdn.net/ztchun/article/details/79110096 自己先简单描述总结一下:当想要将一个对象中已有的值直接给另外一个对象的时候,其实并 ...

  9. java对象拷贝和复制

    参考文章:http://blog.csdn.net/XIAXIA__/article/details/41652057 解决问题:深拷贝.浅拷贝 和普通的对象赋值有什么区别? 对象复制 例如:Pers ...

随机推荐

  1. leetcode Roman to Integer python

    class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int "& ...

  2. 关于Python网络爬虫实战笔记①

    python网络爬虫项目实战笔记①如何下载韩寒的博客文章 python网络爬虫项目实战笔记①如何下载韩寒的博客文章 1. 打开韩寒博客列表页面 http://blog.sina.com.cn/s/ar ...

  3. ActiveMQ的入门demo

    步骤: 1 :下载ActiveMQ 官网:http://activemq.apache.org/ 2 :解压AcitveMQ, 根据自己的操作系统选择运行win64或者win32下的activemq. ...

  4. Android Studio 解决方法No JVM installation found. Please install a 64-bit JDK.

    ————————— Error launching Android Studio ————————— No JVM installation found. Please install a 64-bi ...

  5. windows下搭建python+selenium环境

    1.安装python https://www.python.org/ 2.安装setuptools(python的基础包工具) 下载地址:https://pypi.python.org/pypi/se ...

  6. 求模和求余(附加C语言实现)

    求模和求余的总体计算步骤如下: 1.求整数商  c = a/b 2.计算模或者余数 r = a - c*b 求模和求余的第一步不同,求余在取c的值时向0方向舍入;取模在计算c的值时向无穷小方向舍入. ...

  7. mac定时任务

    <?xml version=”1.0″ encoding=”UTF-8″?><!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” ...

  8. Tensorflow tflearn 编写RCNN

    两周多的努力总算写出了RCNN的代码,这段代码非常有意思,并且还顺带复习了几个Tensorflow应用方面的知识点,故特此总结下,带大家分享下经验.理论方面,RCNN的理论教程颇多,这里我不在做详尽说 ...

  9. e.currentTarget

    e.target总是指向点击的目标 e.currentTarget会指向这个点击标的冒泡对象 <div class="wrap"> wrap <div class ...

  10. Course(简单的字符串处理问题)

    Course 时间限制:1000 ms  |  内存限制:65535 KB [问题描述] There is such a policy in Sichuan University that if yo ...