如题

解决方案 »

  1.   

    应该是8个对象,说一个大意了int[][] scores={{3,2,5,8},{2,9},{3,4}}---------------
    首先是4个java.lang.Class对象:分别是[I[[I,还有java.lang.Object.classjava.io.Serializable.class这4个Class对象应该肯定有,可能还有遗漏之处------------
    然后是一个二维数组对象
    然后是三个一维数组对象关于数组在内存中该以何种数据结构来表示,翻看了一下java语言规范和java虚拟机规范,没有找到相应的说明
    这4个数组对象是臆断
    ---------------
      

  2.   

    不明白这些“java.lang.Object.class,java.io.Serializable.class”东西是怎么创建的....Object对象就不要说了,此题不包含哪些东东哈
      

  3.   

    在虚拟机装载、连接、初始化的连接阶段创建的
    int[][] scores={{3,2,5,8},{2,9},{3,4}}
    scores.getClass()这个方法能返回一个Class对象,就是[[I
    scores[0].getClass()这个方法返回的Class对象是[I的实例
    数组是可序列化的,肯定实现了java.io.Serializable接口,在连接[[I和[I对象的时候,会装载java.io.Serializable接口,导致创建一个Serializable.class,同时,数组肯定继承了java.lang.Object,虚拟机必须装载Object,会创建Object.class不过这个Object.class应该在加载这条语句的类的时候已经创建了,可以不算这条语句创建的
    如果这条语句所在的类实现了java.io.Serializable接口,Serializable.class也可以不算这条语句创建的
      

  4.   

    可以参考这个,虽然两者并不对等,但效果是一样的
                    int[][] scores=new int[3][];
    scores2[0]=new int[]{3,2,5,8};
    scores2[1]=new int[]{2,9};
    scores2[2]=new int[]{3,4};
      

  5.   


         int[][] scores2=new int[3][];
            scores2[0]=new int[]{3,2,5,8};
            scores2[1]=new int[]{2,9};
            scores2[2]=new int[]{3,4};
      

  6.   

    很反感这类问题,老是变着花样问创建了几个对象!我说创建了 100 个对象,什么?你说不正确么?那你自己到 JVM 中去数数吧!
      

  7.   

    干嘛不简单点,你就认为创建了一个二维数组的对象不就完了吗?赋值号左面的,是数据类型的声明;
    赋值号右面的,是一个常量表达式。
    常量表达式,不占用内存空间。(不要矫情,就认为它不占用)你说 int n = 50;  这个语句。
    左边是声明,右边是常量。这样理解,不是很简单吗 ?作为一个常量表达式而言,你用操心他有多少[]{}这些符号吗,它最终只是一个常量。
    比如:
    String s = "把复杂的事情变简单了,聪明~!";
    //你说创建了几个对象?难道字符也算在内 ?常量就是常量,关键看左面。
    boolean b = 3+5>4 ? true : 1+3>2 ;
    //你说创建了几个对象 ?3+5>4 也是对象? true也是对象? 常量就是常量。
      

  8.   

    创建了一个[[I,四个[I为啥是四个[I呢?就不告诉你
      

  9.   

    int[][] scores={{3,2,5,8},{2,9},{3,4}}创建了
    3,2,5,8,9,4,{3,2,5,8},{2,9},{3,4},{{3,2,5,8},{2,9},{3,4}}
    共10个
      

  10.   

    哦?jvm spec上是这么说的:3.5.3 Heap
    The Java virtual machine has a heap that is shared among all Java virtual machine threads. The heap is the runtime data area from which memory for all class instances and arrays is allocated. 
      

  11.   

    我指实现,jvm和jvm规范还是有差别的。
      

  12.   

    此heap非彼heap,从jvm实现的角度讲heap是个整体,由于绝大多数jvm都是由c,c++实现的,c简单的把内存分为了栈和堆,上面的heap我觉得应该是指jvm实现中的heap,而这个heap包括了java程序中常说的方法区和堆内存,不然String s = new String("abc"),创建了两个对象,怎么解释?明显一个abc是放在方法区的常量池中。不知道我这么理解是否正确?
      

  13.   

    既然说java语言,这里说的当然都是指的java堆,java栈,java程序计数器
      

  14.   

    这个方法区中的“abc”,其实也在堆中,只不过方法区中有一个引用指向堆中的这个对象,以后凡有字面值“abc”,都会从常量池中找一次,比如第一次使用的时候,常量池中只是一个Constant_String_info表,而它指向Constant_utf8_info表,这个里面刚开始是一个符号引用,而不是对象,第一次找到这个的时候,jvm解析这个符号引用,在堆中创建“abc”,然后将符号引用替换成直接对堆中“abc”的引用,可能是一个地址
      

  15.   

    其实我们所谓的堆,方法区,就是jvm的c语言实现中c内存的堆区,所以在上面说heap,而我们java程序将c的heap再细分成堆区,方法区等。不要把这个heap和平时说的堆内存混淆吧。
      

  16.   

    其实这个怎么说呢,只能根据上下文自己体会了比如一个人说堆栈,那一般指的是c语言的堆栈,在jvm spec里,确实跟平时说了不一样,但在这样一个语境下,应该是可以分辨的又譬如一个字的大小,一般指的是2个字节,但在jvm spec里,它是一个单位,并没有确定的大小,也是需要根据语境来理解的