黑马程序员技术交流社区

标题: 对象和空间分配 [打印本页]

作者: 李靖    时间: 2012-10-27 20:08
标题: 对象和空间分配
本帖最后由 bhxiaobo 于 2012-10-28 19:46 编辑

Java创建对象可以直接通过new关键字,还可以通过反射机制创建,请问还有其他方式吗,还有就是创建的对象在空间分配上是如何分配的,如果是自己创建的对象,例如Person类,包括name,age俩个字段,如果覆盖了他的equal和hashCode,那么在空间分配时会有什么样的影响呢。例如:Person p1=new Person();Person p2=new Person("zhangsan",23);Person p3=new Person("zhangsan",23);,那么在内存中存在几个对象,还有在内存中如何分配的呢。
作者: 刘丽娜    时间: 2012-10-27 20:31
对空间是对象的引用  占空间是new出的对象  
作者: 张忠豹    时间: 2012-10-27 21:14
1、反正java的对象在创建的时候,都是要将class文件加载至JVM的内存中。所有的这个类的对象,就是根据这个class文件创建的。
2、创建的对象在空间分配上是如何分配的:创建的对象,在分配的时候,会通过根据对象的属性,划分它的大小。通过hashCode来区分它的位置。当然static修饰的属性,是属于类的,不属于对象,所在在对象的划分区域中没有这个static成员,static成员应该是在方法区中。
3、如果覆盖了他的equal和hashCode,顶多也就是对象所存放的位置改变了,对象划分空间的大小没有改变。
作者: 程杰    时间: 2012-10-27 21:27
存在三个对象,只不过他们指向不同,p1指向的是一个person对象,p2,p3他们都指向person("zhangsan",23)
作者: 张胜格    时间: 2012-10-27 22:45
存在三个对象,并且开辟了三块内存,只不p2与p3所指向的内存中的内容相同
作者: 林剑    时间: 2012-10-27 23:57
本帖最后由 林剑 于 2012-10-27 23:58 编辑

分配了三个内存,内存分配情况我试着画了个图,仅供参考:
C:\Users\lenovo\Desktop\1.png

1.png (18.8 KB, 下载次数: 48)

1.png

1.png (18.8 KB, 下载次数: 60)

1.png

作者: 李靖    时间: 2012-10-28 10:47
林剑 发表于 2012-10-27 23:57
分配了三个内存,内存分配情况我试着画了个图,仅供参考:

如何让p2和p3在堆内存中只占一份呢
作者: 林剑    时间: 2012-10-28 13:02
bhxiaobo 发表于 2012-10-28 10:47
如何让p2和p3在堆内存中只占一份呢

Person p2 = new Person("zhangsan",24);
Person p3 = new Person("zhangsan",24);
要是你代码中new了p2,p3,堆内存中的分配就是图中所指的那样,要是p2,p3志向同一个内存块,可以加上
p3 = p2;那p3指向的堆内存块就成垃圾了,JAVA有垃圾自动回收机制。
作者: 李靖    时间: 2012-10-28 13:56
林剑 发表于 2012-10-28 13:02
Person p2 = new Person("zhangsan",24);
Person p3 = new Person("zhangsan",24);
要是你代码中new了p2, ...

如果这样的话,那内存中是几个对象呢?
作者: 林剑    时间: 2012-10-28 19:39
bhxiaobo 发表于 2012-10-28 13:56
如果这样的话,那内存中是几个对象呢?

对象还是3个啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2