dcLunatic's blog

Java克隆

字数统计: 316阅读时长: 1 min
2018/09/21 Share

Java中的Clone

概述

clone,顾名思义,就是复制克隆的意思,我们可以通过clone()方法,来获得一个相同的对象。

实现

如果我们自定义的类要可以被复制,那么类必须实现Cloneable中接clone()方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main{
public static void main(String... args){
Test t1 = new Test();
Test t2 = t1.clone();
}
}
class Test implements Cloneable{
public Test(){}
@Override
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
}

深克隆与浅克隆

但是呢,在java中,我们知道有一些对象是存放在栈区,一些是存放在堆中的,存放在堆中的对象,一般都是由一个在栈中的变量指向它的。

那么,当我们在调用clone()方法的时候,是在复制对象呢,还是复制它的引用呢?

假如我们把上面的代码修改一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main{
public static void main(String... args) throws Exception{
Test t1 = new Test();
Test t2 = (Test)t1.clone();
System.out.println("t1 == t2 ? " + (t1.b == t2.b));
}
}
class Test implements Cloneable{
public int a;
public String b;
public Test(int a, String b){
this.a = a;
this.b = b;
}
@Override
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
}

运行之后,结果是true,也就是说t1跟t2中的String对象b都是同一个。

而这是为什么呢

原文作者:dcLunatic

原文链接:http://dclunatic.github.io/Java%E5%85%8B%E9%9A%86.html

发表日期:September 21st 2018, 1:03:00 pm

更新日期:July 11th 2021, 9:13:50 pm

版权声明:转载的时候,记得注明来处

CATALOG
  1. 1. Java中的Clone
    1. 1.1. 概述
    2. 1.2. 实现
    3. 1.3. 深克隆与浅克隆