各位大侠,小弟初涉Java,有一个关于数组的疑惑……
Class Main{
    public static void main(String[] args){
        A[] aArr = new A[10];
        int[] intArr = {1,2,3};
    }
}class A{
}请问,上面main函数里,两个数组在内存中的保存是一样的么?
如果我没有理解错的话,aArr与intArr都指向堆中的对象,其中aArr对象中保存的是10个指向其他A的引用,那么intArr呢?他保存的是基本类型,那么intArr指向的对象里保存的是什么呢?又在哪里保存呢?

解决方案 »

  1.   

    aArr与intArr都指向堆中的对象
    ============================
    都指向栈,基本类型在栈中创建其中aArr对象中保存的是10个指向其他A的引用,那么intArr呢?他保存的是基本类型,那么intArr指向的对象里保存的是什么呢?又在哪里保存呢?
    =====================================================================================================================
    数组里保存的都是具体对象的地址,如intArr 里保存的是1,2,3这3个int的地址
    aArr现在还是空的,但是内存已经划分给它了
      

  2.   

    刚才没注意看
    A[] aArr = new A[10]; 
    我以为也是int[]
    A[] aArr = new A[10]; 可以保存10个A的实例,只不过现在是空的。
    只要是用new操作符创建的对象都是在堆中的,基本类型都在栈中,大概就是这样
      

  3.   

    aArr中存放的应该是指向A对象的地址,但是intArr 应该存放的是基本性别的数,例如集体的1,2,3等把
      

  4.   

    不管是Aarr还是intArr都是对象,指向的都是堆中的地址。区别在于:
    aArr-》堆中的对象,堆中的十个对象的引用又指向10个A类的对象,只不过你现在都是空的,还没有创建。
    intArr-》堆中的对象,里边保存的是1,2,3
      

  5.   

    羞愧,改正下,基本类型数组里斯直接放具体的值,如int数组。
    谢谢楼上!!!!!
      

  6.   

    ……你们把我搞糊涂了……数组是对象,保存在堆中我觉得应该没问题,现在疑问就是如果是像intArr这样的数组,它里面的数据是怎么保存的……
      

  7.   

    我的理解是:A[] aArr = new A[10];在栈里分配一块空间存储aArr,aArr指向堆里的A对象,A里面分配10个空间,都是null,因为它们目前都没有指向任何对象。int[] intArr = {1,2,3};在栈里分配一块空间存储intArr,intArr里再分出3个空间,分别存放1,2,3。
      

  8.   

    嘿嘿,sorry,这是上学时候关注的问题了,还给老师了-_-!
    像int[] intArr = {1,2,3};这样的基本类型数组,里面的1,2,3匙直接保存在intArr 内存空间里的
    正常的来创建一个int a = 10; 这个int是保存在栈中的,int数组你可以把它当成特殊情况吧
      

  9.   

    15楼的大哥,你的意思是intArr指向的数组对象也在栈中?
    这里最让我疑惑的是intArr指向的数组对象里保存的1,2,3等是保存在栈里还是堆里……
    麻烦大哥再给看看,我知道这么简单的问题问出来,大哥们都不看的……
      

  10.   

    intArr是数组,自然在堆中,
    int[] intArr = {1,2,3}; 创建了一个对象数组,并在堆中给分配了3个空间,1,2,3,这3个值就直接放在这3个空间里,所以这3个字也就在堆里。
    对于int a = 10;这样声明了一个int变量,这个10时放在栈中的