Object[] objects = new Object[12]; 这种情况下内存如何分配空间?

SilentHunter460 2020-08-24 12:16:44
Object[] objects = new Object[12];

第一个问题,Object类型意味着每个元素可以放任意体积的数据,这里需要开辟12个房间。java如何知道这块内存要开多大?等到用户装数据时再开内存吗?java不是遇到new就马上开内存的?如果等到装数据再开内存,那这个数组的内存空间就不连续了。

第二个问题,我记得C语言创建一个指针,一般要确定指针的数据类型为妥,指针+1才知道要走多远。上面的Object数组,这个元素只放一点点数据,下一个元素放巨大数据,下标+1指针要移动多少?
...全文
5816 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SilentHunter460 2020-08-26
  • 打赏
  • 举报
回复
引用 3 楼 如此美丽的你 的回复:
首先你要明白这数组里存的是啥,这数组里存的这是Object类型的引用 而不是Object对象(引用还需要用 new Object来初始化不然是NULL),引用即地址和c的指针一样,32位系统就是4个字节,64位系统就是8个字节,所以这里不管类型是Object还是A类 、B类 都一样,他们引用都是4/8个字节数组大小在new Object[12] 大小已经确定与类型无关 类似的在C 语言里面不管是A类型、B类型的指针 + 1 都是移动4/8字节 跟指针类型无关
谢谢回复。结合你与2楼的解释,我大约明白数组是什么了。我形象地说一下我的理解你看是否正确:数组就是一个写着各种地址的记事本,从天安门城楼到某小区到山间茅草屋,实际上差别很大,记事本上不过是几行字而已,所以记事本只管还有没有空间写字。
如此美丽的你 2020-08-24
  • 打赏
  • 举报
回复
首先你要明白这数组里存的是啥,这数组里存的这是Object类型的引用 而不是Object对象(引用还需要用 new Object来初始化不然是NULL),引用即地址和c的指针一样,32位系统就是4个字节,64位系统就是8个字节,所以这里不管类型是Object还是A类 、B类 都一样,他们引用都是4/8个字节数组大小在new Object[12] 大小已经确定与类型无关

类似的在C 语言里面不管是A类型、B类型的指针 + 1 都是移动4/8字节 跟指针类型无关
qybao 2020-08-24
  • 打赏
  • 举报
回复
1 这个房间的大小是固定的,就是记录一个地址,这个地址指向的才是实际对象的家,所以objects只相当于一本通信录,记录了12个连续的地址(比如记录xx街1号,xx街2号,这只是个地址,至于xx街1号这个地址的家有多大,那才取决于该地址指向的对象的类型)。对于c来说,这个房间的就是指针的大小。32位系统就是4个字节,64位系统就是8个字节。 2 上面说了,objects只是本通信录,所以xx街1号到底是平房还是大楼,也不影响它能找到xx街2号。
遇见女神 2020-08-24
  • 打赏
  • 举报
回复
妥妥地不用记得,需要重新复习一下包括不仅限于C指针的内容。 1,指针是固定长度的。 2,java语言是强类型的。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧