zq910515 2015-02-09 10:32 采纳率: 50%
浏览 3653
已采纳

java中创建数组时内存怎么分配????

int[] arr=new int[3];

问题: 上面创建int数组时,怎么分配内存的?arr是一个引用变量,是通过指针指向new int[3](存在堆里面)对吧,那么,栈里面为arr分配几个指针,是3个还是1个?

补充:

疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?

疑问2****: 如果是一个,那么,这个指正指向谁????

疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????

疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(实例对象数组的元素在元素创建时可是null的,对吧。而且在数组使用过程中数组元素指向的对象是可以变的,这不就意味着内存在变吗!!)

综合上述:我觉得数组创建时(我指的是被new出来时),栈中会为数组创建数组长度个指针分别指向每个元素。

但是,问题又来了。

问题5****:

int[] arr;//这里分配几个指针(栈)??

arr=new int[3];

还请大神来解答我的疑惑,能解答一个是一个。。。谢谢。。

  • 写回答

1条回答

  • devmiao 2015-02-09 10:49
    关注

    疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?
    栈中为arr分配一个存储单位,存储的是指向一个新创建的数组的引用
    疑问2****: 如果是一个,那么,这个指正指向谁????
    指向数组对象
    疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????
    指向数组对象,数组对象包含它的长度,和C++不同,这是引用,不是指针
    疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(
    那很简单,就是指向数组对象,当你通过数组+索引访问元素的时候,得到的对象的引用,再指向真正的对象
    问题5****:
    int[] arr;//这里分配几个指针(栈)??
    arr=new int[3];
    这里第一行定义了一个数组对象的引用,叫arr,但是不指向任何对象
    new int[3]创建了一个三个元素的数组对象,并且让arr指向它

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?