请问:下面的多维数组声明创建了几个对象呢~~~???int[][][] array = new int[3][2][2];

解决方案 »

  1.   

    就只有1个对象啊
    只不过这个数组被分配了很多空间你用多new一个 就多一个对象
    只是对象的大小不同罢了就像:int[][][]   array   =   new   int[3][2][2];   //3维数组
    int[]   array2   =   new   int[3];             //1维数组
      

  2.   

    一共10个对象。new int[3][][]    // 这时创建了1个数组,即最外维的数组,包含3个元素,都是null
    new int[3][2][]   // 这时创建了3个数组,每个包含2个元素null
    new int[3][2][2]  // 这时创建了6个数组,每个包含2个元素0所以一共是10个数组。
      

  3.   

      对象是NEW出来的 只有一个对象!
      

  4.   

    package net.xiaohai;/**
     * @author haihai
     * 
     */
    public class TestMain {
    public TestMain() {
    int[][][] array = new int[3][2][2];
    int count=0;
    for(int i=0;i<array.length;i++){
    for(int j=0;j<array[i].length;j++){
    for(int k=0;k<array[i][j].length;k++){
    array[i][j][k]=count++;
    }
    }
    }
    for(int i=0;i<array.length;i++){
    for(int j=0;j<array[i].length;j++){
    for(int k=0;k<array[i][j].length;k++){
    System.out.print(array[i][j][k]+"\t");
    }
    System.out.println();
    }
    System.out.println();
    }
    } public static void main(String[] args) {
    new TestMain();
    }
    }
    这个数组中存放的是对象的话,应该是12个
      

  5.   

    怎么这么多答案?~~我感觉得6楼说10个应该是对的
    int[][][] array = new int[3][2][2]; 与 int[][][] array = new int[3][2][0];创建的对象是一样的吗?
      

  6.   

    呵呵,回答问题不要想当然。我以人格担保,是10个对象。不相信的可以到eclipse里面做个debug,数一数看看有内存地址的对象是不是10个。to所有认为只创建了一个对象的人:
    这个问题的关键是,java中所谓的“多维数组”只是存储了指向数组的引用的数组,而不是矩阵。因此,一个多维数组不可能由一个对象担当。
    楼主例子中的三维数组的内存结构如下图:
    to认为创建了12个对象的人,思路不对。
      

  7.   

    忘了to楼主了:你的思路是对的,握手!new int[3][2][2]与new int[3][2][0]创建的对象个数相同。如上图所示。
      

  8.   

    借问一个问题,下面这个类public class A{
        private a1 = "1";   //1
        private a1 = "2";   //2
        private a1 = "3";   //3
        private a1 = "4";   //4
        private a1 = "5";   //5
        private a1 = "4";   //6
        private a1 = "3";   //7
        private a1 = "2";   //8
        private a1 = "1";   //9
    }new A()创建了多少个对象
      

  9.   

    16楼的类无法编译。如果你指的是下面这样:public class A {
      private String a1 = "1";
      private String a2 = "2";
      private String a3 = "3";
      private String a4 = "4";
      private String a5 = "5";
      private String a6 = "4";
      private String a7 = "3";
      private String a8 = "2";
      private String a9 = "1";
    }那么,new A()创建了6个对象。
    A的实例本身是一个,字符串字面量"1","2","3","4","5"各一个对象。
    因为相同的字符串字面量不会再次创建,所以当执行到private String a6 = "4";时,不再创建对象了,只创建一个引用(引用不算对象)。余下同理。
      

  10.   

    还真是10个对象
     int[][][] sss=new int[3][2][2];
            System.out.println(sss);
            for(int i=0;i<sss.length;i++){
                System.out.println(sss[i]);
                for(int j=0;j<sss[i].length;j++){
                    System.out.println(sss[i][j]);
                    for(int k=0;k<sss[i][j].length;k++){
                       // System.out.println(sss[i][j][k]);
                    }
                }
            }如果定义成这样int[][][] sss=new int[3][][];就只有一个对象了。
      

  11.   

    DAO1980讨论的是内存块用了多少!而不是对象。面向对象的目的不就是屏蔽我们对内存的直接处理吗?
    不过你对JAVA内存管理可谓是到家了,佩服!!!!!
      

  12.   

    to cxz7531:数组不是对象这种说法没有任何依据。
    实际上,jre管理着一个用以生成数组的类,这个类和Object有着几乎一模一样的接口,除了多了一个只读属性length。
    java的数组是Object,这一点是肯定的,任何时候你都可以把一个数组当作一个Object来用。实际上,你完全可以把数组类当作Object的子类来对待(比如完全可以向需要Object参数的方法传入一个数组,因为数组 “is a” Object)。
    所以说,java的数组是封装过的,和c/c++中的“低级”数组完全不同。to raojl:“对象”这个术语不仅仅是问题领域的概念。恰恰相反,当涉及到一个编程语言时,我们注意的更多的是实现领域的问题。否则,我们就不是在讨论java了,而是在讨论一般层面的OOP。
    另外,我讨论的不仅仅是内存,在java中,everything is an Object,除了引用和简单类型(因为它们不是动态地在堆上创建的)。所以,运行时创建的一切都是Object。
    java不是要屏蔽对内存的管理,而是要让内存管理更简单(只要掌握一些既定规则即可),所以你必须了解java的内存机制才能做到管理内存。
      

  13.   

    晕忽忽~~~弱弱的问下,一个类new后是创建一个对象,还是不一定呢?
      

  14.   

    我认为应该是10个对象,分别是:
     1.array
     2.array[0]
     3.array[1]
     4.array[2]
     5.array[0][0]
     6.array[0][1]
     7.array[1][0]
     8.array[1][1]
     9.array[2][0]
    10.array[2][1]
      

  15.   

    我觉得谈对象离不开类型,应该说明是哪个类的对象(即实例)。
    针对楼主所说的问题,应该是一个int [3][2][2]对象,其中包含3个int [2][2]对象,每个int [2][2]对象又包含2个int [2]对象。如果是new int[3][][],则只生成int [3][][]对象,其中三个二维数组元素还没有生成对象。to Dan1980:
    你的解释很好,让我见识不少,特别是你的图示。但正如Rayjl所说的,你展示了一个int [3][2][2]对象的内存存储状况,正是那十个内存块,才构成一个int [3][2][2]对象。至于你讲的十个对象是算完整体的,再算里面局部的,就想算完中国这个对象后再算上海这个对象一样。总的来说谈对象不能脱离类型!
      

  16.   

    我认为是2个,一个是申明的array   ,另外个是new的时候产生的int   [3][2][2]。
      

  17.   


    借问一个问题,下面这个类 public   class   A{ 
            private   a1   =   "1 ";       //1 
            private   a1   =   "2 ";       //2 
            private   a1   =   "3 ";       //3 
            private   a1   =   "4 ";       //4 
            private   a1   =   "5 ";       //5 
            private   a1   =   "4 ";       //6 
            private   a1   =   "3 ";       //7 
            private   a1   =   "2 ";       //8 
            private   a1   =   "1 ";       //9 
    } new   A()创建了多少个对象
    我提出这个问题来本是想说明研究这个并无多大意义,这上面的属性是已知的,如果给一个未知的类,UnknowClass
    然后问你new UnknowClass()会创建多少个对象,没多大意义
      

  18.   

    同意dan1980的观点
    我也认为是10个
    这个就是引用的个数三
      

  19.   

    masking!! 不过我还是认为是一个。因为从JAVA的角度来话,把它当成一个引用。是对的
      

  20.   

    一个!
    int型的还好
    用引用类型的话好象会出空指针的错误
    我以前就犯过的
    用C来想的话就是定义了一个三级指针吧
      

  21.   

    new int[3][][] 一个对象
    new int[3][2][] 1+3个对象
    new int[3][2][2] 1+3+6个对象
    new int[3][2][]==》array=new int[3][][];
    array[0]=new int[2][]; 
    array[1]=new int[2][];
    array[2]=new int[2][];
      

  22.   

    这个问题的关键是,java中所谓的“多维数组”只是存储了指向数组的引用的数组,而不是矩阵。因此,一个多维数组不可能由一个对象担当。 
    -------------------------
    顶这句