- 论坛徽章:
- 0
|
原帖由 zhang12321 于 2006-2-17 10:26 发表
那是不是这个意思呢?
final b
string a = b
setA()改变a的值
这样b的值就跟着改变了
改变a的值,应该理解成改变引用a指向的内存地址.
之前引用a,指向的地址跟引用b指向的地址是相同的.
setA()后,引用a指向另一个地址了.但是b的一直没变啊
原帖由 zhang12321 于 2006-2-17 10:26 发表
但是不能这样用setB(),
是这个意思吗???
假如你企图在setB()里令引用b指向另一个内存地址,则是不可以的.
因为final string b= new String("xxx");(或则其他)
该句表示 对象"xxx"构建完毕后,引用b指向该对象的首地址,由于final的缘故,引用b不可以再指向别的地址,
比如b=new String("another").
虽然如此,,但是如果引用b指向的对象是可变的(mutable,string类型是不可变的),那么可以同过引用b,来改变
引用b指向的对象的内容(相当于通过引用b找到指向的内存首地址,,然后改变改连续内存单元(一个对象的表示)的内容.
ps:建议楼主熟悉Java的内存模型 |
|