java 克隆 clone
2017-01-03 17:24
253 查看
一、介绍
java中没有指针概念,所以存在对象的引用问题。如果对象作为参数传递或者直接使用=其实都是对对象的引用。也就是你修改第二个对象的同时第一个对象的内容也改变了。二者地址相同。所以java中需要通过继承Cloneable接口实现对象的克隆。二、浅Clone
浅克隆又称影子克隆。一般情况下适用于java基本数据类型和string类型。对于复杂类型无法满足要求。package test; public class CloneTest implements Cloneable { public String name; public Object clone() { Object clone = null; try{ clone = super.clone(); } catch (CloneNotSupportedException e){ e.printStackTrace(); } return clone; } public static void main(String[] args){ CloneTest test = new CloneTest(); CloneTest copyTest = new CloneTest(); test.name = "AAAA"; copyTest = (CloneTest)test.clone(); copyTest.name = "BBBB"; System.out.println(test.name); System.out.println(copyTest.name); } }
三、深Clone
对于复杂成员,vector、数组之类的需要采用深层克隆。package test; public class CloneTest implements Cloneable { public String[] name = new String[2]; public Object clone() { CloneTest clone = null; //注意申明的对象,后面调用clone.name需要类中有此类型 try{ clone = (CloneTest)super.clone(); clone.name = (String[])name.clone(); } catch (CloneNotSupportedException e){ e.printStackTrace(); } return clone; } public static void main(String[] args){ CloneTest test = new CloneTest(); CloneTest copyTest = new CloneTest(); test.name[0] = "AAAA"; test.name[1] = "AA11"; copyTest = (CloneTest)test.clone(); copyTest.name[0] = "BBBB"; copyTest.name[1] = "BB11"; System.out.println(test.name[0]); System.out.println(copyTest.name[0]); } }
相关文章推荐
- Java克隆(Clone)的应用
- Java中的克隆(Clone)机制
- Java中的克隆(Clone)机制
- Java克隆(Clone)的应用
- Java中的克隆(CLONE)
- java克隆(Clone)
- Java中的克隆(Clone)机制
- Java Deep Clone Shallow Clone 深克隆和浅克隆
- Java Deep Clone Shallow Clone 深克隆和浅克隆
- Java克隆(Clone)的应用
- java知识点总结(==和equals,对象克隆clone等)
- Java 中克隆函数详解 clone()
- Java克隆(Clone)的应用
- Java 克隆Clone 和 Apache BeanUtils
- java知识点总结(==和equals,对象克隆clone等)
- Java中的克隆(Clone)机制
- Java clone() 浅克隆与深度克隆
- 【转】 Java克隆(Clone)的应用
- Java克隆(Clone)的应用
- java--为自己的类对象添加clone(克隆)能力