浅拷贝:拷贝基本类型成员和
对象类型成员的引用
深度拷:拷贝基本类型成员和
对象类型成员的引用对象
package test;
public class CloneTest
{
public static void main(String[] args)
// 浅度拷贝Shallow copy
Type type = new Type("cat");
MyObject obj1 = new MyObject(10, type);
MyObject obj2 = (MyObject) obj1.clone();
obj1.type.type = "dog";
System.out.println("******************浅度拷贝****************");
System.out.println("拷贝数据类型成员和对象类型成员的引用");
boolean isSame = obj1.type == obj2.type;
System.out.println("obj1.type == obj2.type:" + isSame);
System.out.println(obj1);
System.out.println(obj2);
// 深度拷贝Deep copy
MyObject obj = new MyObject(10, type);
MyHobby hobby1 = new MyHobby(obj, 25, "king");
MyHobby hobby2 = (MyHobby) hobby1.clone();
hobby1.myFavorite = new MyObject(1, new Type("mouse"));
System.out.println("******************深度拷******************");
System.out.println("拷贝基本类型成员和对象类型成员的引用对象");
isSame = hobby1.myFavorite == hobby2.myFavorite;
System.out.println("hobby1.myFavorite == hobby2.myFavorite:" + isSame);
System.out.println(hobby1);
System.out.println(hobby2);
}
}
class Type
{
String type;
public Type(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
public String toString()
{
return this.type;
}
}
class MyObject implements Cloneable
{
private int age;
public Type type;
MyObject()
{
}
public MyObject(int age, Type type)
{
this.age = age;
this.type = type;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public Type getType()
{
return type;
}
public void setType(Type type)
{
this.type = type;
Math.random();
}
public Object clone()
{
Object obj = null;
try
{
obj = super.clone();
} catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return obj;
}
public String toString()
{
return "{name:" + this.type + ",age:" + this.age + "}";
}
}
class MyHobby implements Cloneable
{
public MyObject myFavorite;
private int myAge;
public String myName;
MyHobby()
{
}
public MyHobby(MyObject myFavorite, int myAge, String myName)
{
this.myFavorite = myFavorite;
this.myAge = myAge;
this.myName = myName;
}
public int getMyAge()
{
return myAge;
}
public void setMyAge(int myAge)
{
this.myAge = myAge;
}
public MyObject getMyFavorite()
{
return myFavorite;
}
public void setMyFavorite(MyObject myFavorite)
{
this.myFavorite = myFavorite;
}
public String getMyName()
{
return myName;
}
public void setMyName(String myName)
{
this.myName = myName;
}
@Override
protected Object clone()
{
MyHobby obj = null;
try
{
obj = (MyHobby) super.clone();
} catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
obj.myFavorite = (MyObject) myFavorite.clone();
return obj;
}
public String toString()
{
return this.myName + "\n Favorite:" + myFavorite + "\n age:" + myAge;
}
}
运行的结果:
******************浅度拷贝****************
*拷贝基本数据类型成员和对象类型成员的引用*
obj1.type == obj2.type:true
{name:dog,age:10}
{name:dog,age:10}
******************深度拷贝******************
*拷贝基本数据类型成员和对象类型成员的引用对象*
hobby1.myFavorite == hobby2.myFavorite:false
king
Favorite:{name:mouse,age:1}
age:25
king
Favorite:{name:dog,age:10}
age:25
分享到:
相关推荐
首先,`clone()`方法是Java Object类的一个成员方法,这意味着所有Java类都隐式地继承了这个方法。它的主要作用是创建并返回当前对象的一个副本,也就是浅拷贝。浅拷贝意味着新创建的对象拥有原始对象的属性值,但...
在Java编程语言中,`Object`类是所有类的根,每个自定义类如果没有明确指定父类,都默认继承自`Object`。因此,对`Object`类的理解是每个Java开发者的基本功。本文将深入探讨`Object`类,以及其核心方法`equals()`与...
### Java中的`clone`方法详解:浅拷贝与深拷贝 #### 一、引言 在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文...
`clone`方法存在于Java的`java.lang.Object`基类中,所有Java类都默认继承自`Object`类,因此所有类都具备`clone`能力。 首先,要使用`clone`方法,我们需要确保类实现了`Cloneable`接口。`Cloneable`接口并没有...
这个方法是Object类的一个成员,因此所有的Java类都默认拥有`clone`方法。不过,需要注意的是,`clone`方法并不执行深拷贝,也就是说,如果对象中包含引用类型的属性,这些引用指向的内存区域是共享的,不是完全独立...
在Java编程语言中,`Clone`机制是一种对象复制的方式,允许创建一个现有对象的副本。在Java中,对象的默认复制是浅复制(shallow copy),这意味着只复制对象本身,而不复制它引用的对象。要实现深复制(deep copy)...
在Java编程语言中,`Cloneable`接口和`clone()`方法是两个重要的概念,它们用于对象复制。在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让...
首先,`clone`方法是Java `Object`类的一个成员方法,定义为`protected Object clone() throws CloneNotSupportedException`。这意味着所有Java类都隐式地继承了这个方法,尽管默认的`clone`实现仅仅是一个浅拷贝。...
`Object`类中的`clone()`方法默认是受保护的(`protected`),这意味着只有在同一包内的类或者继承自该类的子类中才能直接调用`clone()`方法。这种设计是为了防止不相关的类随意克隆对象,从而保证了数据的安全性。...
这个压缩包文件"详解Java中Object 类的使用.rar"包含了对Java中Object类的深入探讨,通过阅读其中的"详解Java中Object 类的使用.txt"文本,我们可以了解到关于Object类的一些关键知识点。 1. **对象的创建与类型...
`clone`方法是Java `Object`类中的一个`protected`方法,这意味着在使用`clone`时,需要考虑以下几个关键点: 1. **什么是`clone`**: 当我们需要创建一个已有对象的精确副本时,就可以使用`clone`方法。它不是...
这个源码资源是关于Java中的Object类的讲解案例代码。Object类是所有Java类的根类,它定义了一些常用的方法,例如equals()、hashCode()、toString()等。本案例代码将详细展示Object类的使用方法,并提供一些实际场景...
在Java编程语言中,`java.lang.Object`是所有类的根类,无论是用户自定义类还是内置类,它们都直接或间接地继承自Object类。这个类提供了许多基础方法,这些方法对于对象的操作和管理至关重要。现在,我们将深入探讨...
Java中的`clone()`方法是Object类的一个成员方法,它提供了创建一个对象副本的功能。这篇文章将深入探讨`clone()`方法的工作原理、使用场景以及浅拷贝(shallow clone)与深拷贝(deep clone)的区别。 首先,让...
protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub test t = null; t = (test) super.clone(); return t; } } ``` 深复制和浅拷貝 在 Java 中,clone() ...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个方法来源于`java.lang.Object`类,所有Java类都默认继承了这个方法。本资料"Java中clone方法共6页.pdf.zip"可能包含了关于...
在Java中,`clone`方法是`Object`类的一个受保护的方法,这意味着所有Java对象都隐含地继承了这个方法。然而,`Object`类的`clone()`方法执行的是浅克隆,即如果对象包含其他对象的引用,`clone()`只会复制这些引用...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在处理对象复制和克隆时。这个方法源自`Object`类,是所有Java类的基类。`clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存...
在Java中,浅拷贝可以通过实现`Cloneable`接口并重写`clone()`方法来完成。以下是一个简单的浅拷贝示例: ```java public class Person implements Cloneable { private String name; private int age; private ...
Java Object 类是所有Java类的根类,每个自定义的Java类都会无意识或有意识地继承Object类。Object类提供了几个核心的方法,这些方法在处理对象时非常关键,包括equals()、hashCode()、toString()、clone()、...