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];
还请大神来解答我的疑惑,能解答一个是一个。。。谢谢。。
针对疑问4,我想问一下。也就是说当元素为对象时,栈里存储的指针不是指向第一个元素,而是指向一个“数”,这个“数”才是指向数组元素的指针(或则就是元素在堆中的存储地址)对吧?当数组元素有变动时,修改对应的“数”就行了,对吧??
其实我也是这样认为的。只是放上来看看其他人的意见。
啊对对 就是修改地址 那个数