java中可以将某个引用变量的值赋值给另外一个引用变量,
这种引用变量之间的赋值是对象引用的传递,而不是对象的复制。这句话怎么理解啊,,什么叫做对对象的复制啊?什么又叫做对象引用的传递啊...
这种引用变量之间的赋值是对象引用的传递,而不是对象的复制。
这句话怎么理解啊,,什么叫做对对象的复制啊?什么又叫做对象引用的传递啊 展开
这句话怎么理解啊,,什么叫做对对象的复制啊?什么又叫做对象引用的传递啊 展开
3个回答
展开全部
首先生成对象的时候对象的内容被存储在内存中的,存储的位置会有段内存地址
而 当 A a = new A(); 的时候可以如下理解
new A() 在内存中保存该对象并返回存储位置的地址, A a = new A();执行的时候呢a的值
可以理解为a = 内存地址这样
那么在引用传递的时候比如 A b = a的时候,相当于 b = a的内存地址
所以无论对a还是b进行修改的话,实际上都是修改内存中由new A()生成的对象
而 a 和 b 其实都是对 new A()生成的对象的引用
对象的复制是指内存中实际存储两个对象,只不过第二个对象的所有之都与第一个对象相同,
相当于 A b = new A(),让后再把a 中的内容全部复制到b中,
这个时候修改 a 的时候 b的内容不会改变
而 当 A a = new A(); 的时候可以如下理解
new A() 在内存中保存该对象并返回存储位置的地址, A a = new A();执行的时候呢a的值
可以理解为a = 内存地址这样
那么在引用传递的时候比如 A b = a的时候,相当于 b = a的内存地址
所以无论对a还是b进行修改的话,实际上都是修改内存中由new A()生成的对象
而 a 和 b 其实都是对 new A()生成的对象的引用
对象的复制是指内存中实际存储两个对象,只不过第二个对象的所有之都与第一个对象相同,
相当于 A b = new A(),让后再把a 中的内容全部复制到b中,
这个时候修改 a 的时候 b的内容不会改变
展开全部
引用的概念可以延伸到C语言中的指针实际上引用存储的就是一个对象的地址(不同虚拟机的机制不同 但是完全可以理解为存储的就是地址 这里不做深究 )
打个比方指针相当于一座房子的钥匙,而真正的内容则是这个房子 那么在java中 引用就相当于
钥匙 拿着钥匙自然可以进这座房子 显然房子就是所谓的对象 引用之间的赋值就是配了一把新钥匙的概念 注意此时的两把钥匙都可以操纵这个房子 但是房子显然只有一座 那么对应的 内存中的分配情况则是 两引用指向一个对象 引用的传递就是钥匙的复制
假设两把钥匙为 a,b 假如钥匙a操作房子的窗户将其改成绿色的 那么钥匙钥匙b查看房子的窗户颜色的时候显然也是绿色的 所以用传递后的引用改变对象属性时 所有指向这个对象的引用查看对象属性时 都会发现已经改变后的结果 希望你能理解!
打个比方指针相当于一座房子的钥匙,而真正的内容则是这个房子 那么在java中 引用就相当于
钥匙 拿着钥匙自然可以进这座房子 显然房子就是所谓的对象 引用之间的赋值就是配了一把新钥匙的概念 注意此时的两把钥匙都可以操纵这个房子 但是房子显然只有一座 那么对应的 内存中的分配情况则是 两引用指向一个对象 引用的传递就是钥匙的复制
假设两把钥匙为 a,b 假如钥匙a操作房子的窗户将其改成绿色的 那么钥匙钥匙b查看房子的窗户颜色的时候显然也是绿色的 所以用传递后的引用改变对象属性时 所有指向这个对象的引用查看对象属性时 都会发现已经改变后的结果 希望你能理解!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象的复制:在内存里面,又开辟出一个空间保存这个复制的对象,就是说两个一样的对象,各占一个空间.
对象的引用:就是本来这个对象占了一个空间,某个对象引用之后,指针指向这个本来已经存在的对象,而不是重新复制一份,再开辟一个空间..
对象的引用:就是本来这个对象占了一个空间,某个对象引用之后,指针指向这个本来已经存在的对象,而不是重新复制一份,再开辟一个空间..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询