Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?

Python013

Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?,第1张

是的。

对象是引用类型的,所以如果把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了。也就是说,如果对象都是同一地址,那么改变该地址的值,另外一个同地址的对象也会改变。

首先可以使用构造器的参数区别开两个对象,如果要直接赋值而不互相影响,那么可以使用clone(浅复制、深复制包含内部引用等)方法如Person newPerson=(Person)oldPerson.clone()这样新旧对象是2个对象而不是共用一个地址的2个对象。

堆和栈

内存管理在Java语言中是JVM自动操作的,当JVM发现某些对象不再需要的时候,就会对该对象占用的内存进行重分配(释放)操作,而且使得分配出来的内存能够提供给所需要的对象。

在一些编程语言里面,内存管理是一个程序的职责,但是书写过C++的程序员很清楚,如果该程序需要自己来书写很有可能引起很严重的错误或者说不可预料的程序行为,最终大部分开发时间都花在了调试这种程序以及修复相关错误上。

以上内容参考:百度百科-java内存模型

对象是引用类型的,所以如果你把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了,这就比如你知道xxx家的地址,然后你告诉了另一个人,这个人也知道了这个地址,但是xxx的家你并没有直接拿给另一个人,所以显而易见,你去xxx家拿东西,另一个人去了会发现少了,如果像你说的改成直接复制一份给另一个人的话,那么你需要把xxx的家重新盖一套,东西都一样,然后搬过去交给另一个人,显然这不可能那么java是面向对象的,它是完全符合面向对象的观点的,正因为你不可能重新盖一套房给人家一样,java也是这样做的

通常用String ss="asasasa"就可以了,用String str=new String ("men")比较麻烦,因为它实际创建了两个字符串,意思就是用“men”这个字符串来初始化str.String str=new String ()

他只是创建了一个字符串对象,可以在后续给他赋值初始化。也可以用他的引用来调用一些String类的方法。