java中可以将某个引用变量的值赋值给另外一个引用变量,

2024-12-04 23:40:41
推荐回答(3个)
回答1:

首先生成对象的时候对象的内容被存储在内存中的,存储的位置会有段内存地址
而 当 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的内容不会改变

回答2:

引用的概念可以延伸到C语言中的指针实际上引用存储的就是一个对象的地址(不同虚拟机的机制不同 但是完全可以理解为存储的就是地址 这里不做深究 )
打个比方指针相当于一座房子的钥匙,而真正的内容则是这个房子 那么在java中 引用就相当于
钥匙 拿着钥匙自然可以进这座房子 显然房子就是所谓的对象 引用之间的赋值就是配了一把新钥匙的概念 注意此时的两把钥匙都可以操纵这个房子 但是房子显然只有一座 那么对应的 内存中的分配情况则是 两引用指向一个对象 引用的传递就是钥匙的复制
假设两把钥匙为 a,b 假如钥匙a操作房子的窗户将其改成绿色的 那么钥匙钥匙b查看房子的窗户颜色的时候显然也是绿色的 所以用传递后的引用改变对象属性时 所有指向这个对象的引用查看对象属性时 都会发现已经改变后的结果 希望你能理解!

回答3:

对象的复制:在内存里面,又开辟出一个空间保存这个复制的对象,就是说两个一样的对象,各占一个空间.
对象的引用:就是本来这个对象占了一个空间,某个对象引用之后,指针指向这个本来已经存在的对象,而不是重新复制一份,再开辟一个空间..