java浅克隆与深克隆
来源:互联网 发布:linux idea 安装 编辑:程序博客网 时间:2024/05/21 09:19
浅克隆:
package testclone;public class ShallowClone implements Cloneable {public String name;public String[] name2;public ShallowClone() {name2 = new String[2];}public Object clone() {ShallowClone o = null;try {o = (ShallowClone) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return o;}}
package testclone;public class TestShallowClone {public void changeA(ShallowClone a) {a.name = "b";}public void changInt(int i) {i = i * 2 + 100;}public static void main(String[] args) {TestShallowClone test = new TestShallowClone();ShallowClone a = new ShallowClone();a.name = "a";System.out.println("before change : a.name=" + a.name);test.changeA(a);System.out.println("after change : a.name=" + a.name);int i = 1;System.out.println("before change : i=" + i);test.changInt(i);System.out.println("after change : i=" + i);ShallowClone a1 = new ShallowClone();ShallowClone a2 = (ShallowClone) a1.clone();a1.name2[0] = "a";a1.name2[1] = "1";a2.name2[0] = "b";a2.name2[1] = "1";System.out.println("a1.name2=" + a1.name2);System.out.println("a1.name2=" + a1.name2[0] + a1.name2[1]);System.out.println("a2.name2=" + a2.name2);System.out.println("a2.name2=" + a2.name2[0] + a2.name2[1]);}}
输出:
before change : a.name=aafter change : a.name=bbefore change : i=1after change : i=1a1.name2=[Ljava.lang.String;@61de33a1.name2=b1a2.name2=[Ljava.lang.String;@61de33a2.name2=b1
深克隆:
package testclone;public class DeepClone implements Cloneable {public String name;public String[] name2;public DeepClone() {name2 = new String[2];}public Object clone() {DeepClone deepClone = null;try {deepClone = (DeepClone) super.clone();if (name != null) {deepClone.name = new String(name);}if (name2 != null) {deepClone.name2 = new String[name2.length];for (int i = 0; i < name2.length; i++) {deepClone.name2[i] = this.name2[i];}}} catch (CloneNotSupportedException e) {e.printStackTrace();}return deepClone;}}
package testclone;public class TestDeepClone {public void changeDeepClone(DeepClone a) {a.name = "b";}public void changInt(int i) {i = i * 2 + 100;}public static void main(String[] args) {TestDeepClone test = new TestDeepClone();DeepClone a = new DeepClone();a.name = "a";System.out.println("before change : a.name=" + a.name);test.changeDeepClone(a);System.out.println("after change : a.name=" + a.name);int i = 1;System.out.println("before change : i=" + i);test.changInt(i);System.out.println("after change : i=" + i);DeepClone a1 = new DeepClone();DeepClone a2 = (DeepClone) a1.clone();a1.name2[0] = "a";a1.name2[1] = "1";a2.name2[0] = "b";a2.name2[1] = "1";System.out.println("a1.name2=" + a1.name2);System.out.println("a1.name2=" + a1.name2[0] + a1.name2[1]);System.out.println("a2.name2=" + a2.name2);System.out.println("a2.name2=" + a2.name2[0] + a2.name2[1]);}}
输出:
before change : a.name=aafter change : a.name=bbefore change : i=1after change : i=1a1.name2=[Ljava.lang.String;@61de33a1.name2=a1a2.name2=[Ljava.lang.String;@14318bba2.name2=b1
0 0
- java 深克隆与浅克隆
- java 深克隆与浅克隆 .
- java 浅克隆与深克隆
- java 浅克隆与深克隆
- java的深克隆与浅克隆
- Java深克隆与浅克隆
- java浅克隆与深克隆
- java浅克隆与深克隆
- java 中浅克隆与深克隆
- java深克隆与浅克隆
- Java的浅克隆与深克隆
- Java 浅克隆与深克隆
- Java的深克隆与浅克隆
- java深克隆与浅克隆
- java深克隆与浅克隆
- JAVA深克隆与浅克隆1
- java浅克隆与深克隆
- java浅克隆与深克隆
- 取石子(七)(NYOJ 833)
- javascript邮箱验证与with()使用方法
- 2014最值得期待的一年
- 一个SQLite3的小例子
- matlab编程与工程应用(第二版) 第一章 matlab简介 笔记
- java浅克隆与深克隆
- 计算机核心期刊排名及投稿信息
- zb的生日(NYOJ 325)
- mongodb 分片
- 多线程读取大数据文件
- 【UVaOJ】712 - S-Trees
- HTML4,HTML5,XHTML 之间有什么区别?
- C#调用C++生成的类(通过CLR类库实现)
- 算法之排序-----排序第四篇 堆排序