A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李靖 中级黑马   /  2012-10-27 20:08  /  1932 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);,那么在内存中存在几个对象,还有在内存中如何分配的呢。

评分

参与人数 1黑马币 +9 收起 理由
韩军博 + 9 很给力!

查看全部评分

9 个回复

倒序浏览
对空间是对象的引用  占空间是new出的对象  
回复 使用道具 举报
1、反正java的对象在创建的时候,都是要将class文件加载至JVM的内存中。所有的这个类的对象,就是根据这个class文件创建的。
2、创建的对象在空间分配上是如何分配的:创建的对象,在分配的时候,会通过根据对象的属性,划分它的大小。通过hashCode来区分它的位置。当然static修饰的属性,是属于类的,不属于对象,所在在对象的划分区域中没有这个static成员,static成员应该是在方法区中。
3、如果覆盖了他的equal和hashCode,顶多也就是对象所存放的位置改变了,对象划分空间的大小没有改变。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
存在三个对象,只不过他们指向不同,p1指向的是一个person对象,p2,p3他们都指向person("zhangsan",23)
回复 使用道具 举报
存在三个对象,并且开辟了三块内存,只不p2与p3所指向的内存中的内容相同
回复 使用道具 举报
本帖最后由 林剑 于 2012-10-27 23:58 编辑

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

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

1.png

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

1.png

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
李靖 中级黑马 2012-10-28 10:47:12
7#
林剑 发表于 2012-10-27 23:57
分配了三个内存,内存分配情况我试着画了个图,仅供参考:

如何让p2和p3在堆内存中只占一份呢
回复 使用道具 举报
林剑 中级黑马 2012-10-28 13:02:55
8#
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:56
9#
林剑 发表于 2012-10-28 13:02
Person p2 = new Person("zhangsan",24);
Person p3 = new Person("zhangsan",24);
要是你代码中new了p2, ...

如果这样的话,那内存中是几个对象呢?
回复 使用道具 举报
林剑 中级黑马 2012-10-28 19:39:54
10#
bhxiaobo 发表于 2012-10-28 13:56
如果这样的话,那内存中是几个对象呢?

对象还是3个啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马