java 对象引用
发布网友
发布时间:2022-04-30 04:54
我来回答
共3个回答
热心网友
时间:2023-10-14 09:32
java的内存有堆和栈之说,对象放在栈里,而对象引用的变量或是自己定义的变量都放在一个堆里,也就是对象和变量不是在一起放着的,而是一一对应的关系。
举个例子:
nb1.i这个对象引用的变量i在1号"堆"里
nb2.i这个对象引用的变量i在2号"堆"里
nb1这个对象在1号栈里,
nb2这个对象在2号栈里.
这样是形成了1号栈引用1号堆里的数据;而2号栈引用的是2号堆里的数据。
最后nb1=nb2,就是两个对象同时指向nb2所引用的堆里的变量。
因为nb2.i本来等于=33,那么就会把nb1.i给回收掉,而nb1.i这时候就不是22了,而是33.
这两个对象都同时引用的是被改变有的变量.也就是33.所以现在对那个栈进行数据更改的话,那么其实都是对两个对象进行了更改。
图解:
本来是
1栈=========================>1堆
2栈=========================>2堆
最后是
1栈
===================》1堆(i=33)
2栈
热心网友
时间:2023-10-14 09:33
你的理解部分是对的,对nb1和nb2分配内存不是在注释1和注释2处,而是它的上两句,new NumberTest()才是对这两个对象分配内存,而注释1和注释2处只是对该对象的中的变量i分配内存。另外,在没有为对象分配内存的情况下,不能用.(点)操作(即不能用它引用任何属性,否则会有nullpointException异常)
热心网友
时间:2023-10-14 09:33
你的理解是正确的