JAVA之变量引用

之前,对JAVA的变量引用中的“引用”一词理解的不是那么深,总是受到C中变量赋值的旧观念影响,突然又回想到了这个问题,写下来以供分享。


对于C语言来说,变量的赋值就是在此变量地址所对应的内存中存储对应的值,例如 :
a = 3;
b = a;
c = a;
赋值完成后,b和a再无关系,c也一样,只是3个变量的值相同而已,改变a不会对b和c造成任何影响。


对于JAVA来说,出来基本数据类型(long, int, short, byte, char)的赋值于C相同以外,对于类的赋值,其实都是引用,本质上没有新分配内存给新的类实例(new除外,此处着重说明引用已存在的类实例),仅仅是在变量和实例间创建了连接,即引用。这也就是说,最重要的一点,如果这个类实例发生了改变,那么所有引用此实例的变量都会发生变化。例如:
Date a = new Date();
Date b = a;
Data c = b;
此时,若a(或b,c)调用Date的方法改变了这个实例的时间,那么a,b,c所对应的时间将全部改变,从而容易产生错误。


实例:
之前做的一个小东西,有一个类Box,多个Box实例需要存储对应的PointF,我当时这么写:
PointF point = new PointF();
for(Box box : BoxLab) {
point.set(x++, y++);
box.setPoint(point);
}
Box{

public void setPoint(PointF p) {
mPoint = p;
}

}
代码可能不太准确,但希望能明白我的意思,然后造成我所有的Box实例中的point值是一模一样的,都是循环跳出之前的那个point值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值