java 对象拷贝,java拷贝对象

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

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

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

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

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

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

private int age;

private String name;

public Student(int age, String name) {

this.age = age;

this.name = name;

}

public void show() {

System.out.println(this.age + "" + this.name);

}

public void setAge()

{

this.age = 10;

}

}

public class test {

public static void main(String as[]) {

Student s = new Student(1, "name");

Student temp = s;

temp.setAge();

temp.show();

s.show();

}

}

上述代码运行结果如下:

10name

10name

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

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

参考下面的代码:

public class BankAccount implements Cloneable {

private double balance;

public BankAccount(double ini) {

this.balance = ini;

}

protected Object clone() {

BankAccount bankAccount = null;

try {

bankAccount = (BankAccount) super.clone();

} catch (CloneNotSupportedException e) {

e.printStackTrace();

}

return bankAccount;

}

public void add(double give) {

this.balance += give;

}

public void redu(double give) {

this.balance -= give;

}

public double getBalance() {

return balance;

}

public void setBalance(double balance) {

this.balance = balance;

}

}

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

看一下clone函数的doc:

Cr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值