Java中将一个对象赋给另一个对象时会发生什么?

#Java中将一个对象赋给另一个对象时会发生什么?

本文通过一个例子来说明java对象的引用机制:
class Computer {
//电脑中的齿轮直径:diameter of a cog in a computer 
float cogDiameter; 
}

public class AssignmentTest {
public static void main(String[] args) {

    // create two computers
    Computer com1 = new Computer();
    Computer com2 = new Computer();
    // first, assign values to com1 and com2
    com1.cogDiameter = 1;
    com2.cogDiameter = 2;
    System.out.println("1:"+"com1.cogDiameter:"+com1.cogDiameter+"  "+"com2.cogDiameter:"+com2.cogDiameter);

    //assign com1 to com2
    com2 = com1;
    System.out.println("2:"+"com1.cogDiameter:"+com1.cogDiameter+"  "+"com2.cogDiameter:"+com2.cogDiameter);

    //change the cogDiameter of com1
    com1.cogDiameter = 6;
    System.out.println("3:"+"com1.cogDiameter:"+com1.cogDiameter+"  "+"com2.cogDiameter:"+com2.cogDiameter);

    }
}
  • 创建一个Computer(电脑)类
  • 这个类包含一个field,也就是float类型的cogDiameter(齿轮直径)
  • 再创建一个AssignmentTest类,用来测试java中将一个对象赋给另一个对象时会发生什么
  • 先创建两个computer对象,分别命名为com1 和 com2
  • 为这两个对象的cogDiameter分别赋值为1和2
  • 第一次输出com1和com2的cogDiameter
  • 然后将com1赋给com2, 注意此时是将对象赋给对象
  • 那么实际系统的工作机制是什么呢?
  • com1和com2这两个名称其实都只是存在于栈内存中的引用,它们只是指向堆内存中的真正的com1和com2对象,而这两个对象的field其实也保存在堆内存中,所以把com1赋给com2的意思就是:把com1的引用赋给com2,这样一来其实com2实际指向的也是com1了
  • 这个时候再输出一次com1和com2各自的cogDiameter就会发现结果有点“出人意料”了
  • 同样地,再改变com1的cogDiameter的值就会发现com2也会受到影响,这也是因为com2真正指向的是com1在堆内存中的对象

Output(输出):
1:com1.cogDiameter:1.0 com2.cogDiameter:2.0
2:com1.cogDiameter:1.0 com2.cogDiameter:1.0
3:com1.cogDiameter:6.0 com2.cogDiameter:6.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值