Java Object类中的-----------clone()克隆机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Object类中的-----------clone()克隆机制相关的知识,希望对你有一定的参考价值。
Java Object类中的-----------clone()克隆机制
package java_lang_object; public class User implements Cloneable { public Address address; public int age; public String name; public User(int age,String name){ this.age = age; this.name = name; this.address = new Address("广州天河"); } public User clone() throws CloneNotSupportedException{ return (User)super.clone(); } }
package java_lang_object; public class Address { public String detail; public Address(String detail){ this.detail = detail; } }
package java_lang_object; /** * 克隆类测试(Object的clone()只是浅克隆,即不会克隆引用类型的变量) * @author Administrator * 1、实现克隆要让类实现Cloneable接口 * 2、重写父类Object中的clone()方法 * 3、克隆只是克隆对象的一个副本(副本:也就是内容都是相同的,都指向同一个对象的堆内存,但是引用不同,分配了两个栈空间) */ /* * 系统提供的clone()方法(也就是Object类提供的clone()方法)是非常高效的,比我们自己写的static clone()高效 */ public class CloneTest { /* * 1、u1、u2分别是两个变量,存放在栈内存中,指向的堆内存地址也不相同(故u1 == u2为false) * 2、 */ public static void main(String[] args) throws CloneNotSupportedException { User u1 = new User(29,"湖北"); //Clone得到u1对象的副本 User u2 = u1.clone(); //两个对象属于两个不同的引用,不相等 System.out.println(u1 == u2); //两个不同的引用指向的是不同堆内存空间,Address实例变量的值时相等的 /* * Object类提供的clone()机制只对对象里各实例变量进行“简单复制”,如果实例变量的类型为引用类型 * Object的clone机制也只是简单的复制了引用变量而已(这也是address实例变量相等的原因,因为两个address实例变量 * 指向的是同一个堆内存) * */ System.out.println(u1.address == u2.address); //实例变量都是相等的 System.out.println(u1.age == u2.age); System.out.println(u1.address.detail == u2.address.detail);//return true } }
本文出自 “11941149” 博客,请务必保留此出处http://11951149.blog.51cto.com/11941149/1851610
以上是关于Java Object类中的-----------clone()克隆机制的主要内容,如果未能解决你的问题,请参考以下文章