java拷贝对象

来源:互联网 发布:淘宝详情页抄袭 编辑:程序博客网 时间:2024/06/10 01:29

这是我个人的理解,加上以前看的一些帖子,有不对的地方,请高人指点。

 

1.作为java参数传递给一个函数的对象,除了很简单的如int或者boolean等简单的以外,传递的都是这个对象的引用。

当在接收函数中改变这个对象的时候,原来的对象即被改变。

2.在初始化一个对象的时候,有时候我们希望用一个已经存在的对象来给另外一个对象赋值,但是直接用“=”给另外一个

对象赋值的话,是错误的,这样会使两个不同的对象名字指向同一个对象。改变其中任何一个都会引起该对象的改变。

 

下面我们实验一下用一个对象给另外一个对象赋值:

 

上述代码运行结果如下:

10name
10name

 

结果表明,虽然是用student的对象s给temp赋值,但是temp和s是指向同一个对象的,temp指向的对象改变age的时候,s指向的对象的age也改变了。不是我们希望得到的。

 

在C++中,有深拷贝和浅拷贝两个概念,java中,我们用Cloneable接口来完全复制一个对象。

参考下面的代码:

我们令BankAccount实现Cloneable接口,实现其父类(就是Object类)的clone函数。

看一下clone函数的doc:

Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object.

上面代码的测试代码如下:

运行结果:

用户 1 的帐户余额为:1025.0
用户 2 的帐户余额为:1020.0

 

这样,我们在用bc1给bc2赋值的时候,就相当于C++中的深拷贝,将一个对象的内容完全赋值给另外一个对象了。

对其中任何一个对象的操作都不会再影响另外一个对象。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~粉葛~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

另外,参见http://blog.csdn.net/naughty610/article/details/6598943,11年的一篇博文,里面有详细介绍clone方法以及shallow clone和deep clone。

原创粉丝点击