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()克隆机制的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中Object类中的equals方法补充

Java中Object类中的方法

java.long.object类中的重要方法

什么是API?Object父类中的一些常用方法

Java中的Object类

Object类中的方法