java开发日记

Java中的clone方法你知道多少?

2018-03-09  本文已影响0人  BobWen

我们知道clone方法在Java中是一个复制对象的方法,那么Java有几种创建对象的方式呢?

1.通过new关键字创建一个对象

2.通过clone方法复制一个对象

复制引用和通过clone方法复制对象有什么不同?

在分析这个问题之前我们先了简单了解下Java中JVM的内存分配,Java的JVM的内存分为3个区:堆(Heap)、栈(Stack)和方法区(Method Area)。

接下来通过两个实例进行分析

实例1

执行 Dog dog1 = dog;是生成一个新对象还是复制的一个引用?

打印结果:

通过打印结果我们看到,执行 Dog dog1 = dog; 后打印的地址是相同的,则执行Dog dog1 = dog;是复制的一个引用。

JVM内存分配情况

实例2

打印结果:

通过打印结果我们看到,执行 Dog dog1 = (Dog) dog.clone(); 后打印的地址是不相同的,则执行Dog dog1 = (Dog) dog.clone();是创建了一个新对象。

JVM内存分配情况

使用clone方法中常提到的深拷贝和浅拷贝

实例3 深拷贝

在执行Body body1 =(Body) body.clone();重新创建了一个新对象而不是复制的一个引用,这种情况叫深拷贝。

实例4 浅拷贝

在执行Body body1 = body;拷贝的是一个引用,这种情况叫浅拷贝。

通过实例3和实例4得出一个结论:如果想要深拷贝一个对象, 这个对象必须要实现Cloneable接口,实现clone方法。

总结:

虽然clone方法平时项目不是很常用,但是通过clone方法去深入了解JVM的内存结构和运行机制,也是写这篇文章的目的。

谢谢阅读!

上一篇 下一篇

猜你喜欢

热点阅读