怎么在java中实现浅拷贝
这篇文章给大家介绍怎么在java中实现浅拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
成都创新互联专业为企业提供坪山网站建设、坪山做网站、坪山网站设计、坪山网站制作等企业网站建设、网页设计与制作、坪山企业网站模板建站服务,10年坪山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
Java可以用来干什么
Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。
1.概念
浅拷贝会创建一个新对象,新对象和原对象本身没有任何关系,新对象和原对象不等,但是新对象的属性和老对象相同。具体可以看如下区别:
(1)如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值;
(2)如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
2.原理
如果原型对象的成员变量是值类型,将复制一份给克隆对象,也就是说在堆中拥有独立的空间;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。换句话说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。
3.使用实例
需要拷贝的类上实现Cloneable接口并重写其clone()方法
class Father{ String name; public Father(String name) { this.name=name; } @Override public String toString() { return "Father{" + "name='" + name + '\'' + '}'; } } class Son implements Cloneable { int age; String name; Father father; public Son(String name,int age) { this.age=age; this.name = name; } public Son(String name,int age, Father father) { this.age=age; this.name = name; this.father = father; } @Override public String toString() { return "Son{" + "age=" + age + ", name='" + name + '\'' + ", father=" + father + '}'; } @Override protected Son clone() throws CloneNotSupportedException { return (Son) super.clone(); } } public class test { public static void main(String[] args) throws CloneNotSupportedException { Father f=new Father("bigFather"); Son s1 = new Son("son1",13); s1.father=f; Son s2 = s1.clone(); System.out.println(s1); System.out.println(s2); System.out.println("s1==s2:"+(s1 == s2));//不相等 System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//相等 System.out.println(); //但是他们的Father father 和String name的引用一样 s1.age=12; s1.father.name="smallFather";//s1.father引用未变 s1.name="son222";//类似 s1.name=new String("son222") 引用发生变化 System.out.println("s1.Father==s2.Father:"+(s1.father == s2.father));//相等 System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//不相等 System.out.println(s1); System.out.println(s2); } }
关于怎么在java中实现浅拷贝就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
网页标题:怎么在java中实现浅拷贝
路径分享:http://azwzsj.com/article/igheep.html