据说基本数据类型是在堆栈里生成的.
而类对象是在堆里建立的...
是这样吗?

解决方案 »

  1.   

    Integer a = new Integer(3); a 存在栈内存
    new 出来的都是存放在堆内存
      

  2.   

    int a = 3
    我想是这样的:
    如果是在方法中定义的,那么分配在堆栈;
    如果是在类中定义的,当生成类的实例时,它作为对象的数据成员分配在堆中;
    如果是在类中定义而且是static的,那么分配在静态存储区中.
      

  3.   

    java基本数据类型分配到栈上,对象数据分配到堆上:Java虚拟机是栈式的,它不定义或使用寄存器来传递或接受参数,其目的是为了保证指令集的简洁性和实现时的高效性(特别是对于寄存器数目不多的处理器)。所有寄存器都是32位的。java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。 基本数据类型的变量的内容直接存储在栈上。Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java语言具有无用单元收集能力:它不给程序员显式释放对象的能力。Java不规定具体使用的无用单元收集算法,可以根据系统的需求使用各种各样的算法。
      

  4.   

    是的.
    对于没有GC的语言来说,分配在堆上的无疑是比较恐怖的,因为用完要记得释放它,不然会引起内存泄漏.
    Java好像除了DB,Socket等比较重量级的资源需要自己手动close之外,其他都有GC帮你搞定.
      

  5.   

    Integer是整型对象,在堆中创建; int是基本数据类型,在栈中为其分配空间.Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 
    原始类型封装类包括: 
    boolean -->Boolean 
    char --->Character 
    byte -->Byte 
    short -->Short 
    int -->Integer 
    long -->Long 
    float -->Float 
    double -->Double 
    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。 因为封装类型是对象,所以可以进行相应的很多对象能力函数操作,这样就可以提供很多基本类型难以完成的工作的完成和实现。 
      

  6.   

    “Integer a”中的a是引用,被放在栈中,“new Integer(3)”是产生一个Integer对象,被置于堆中。
    "int a = 3;"这种变量创建方式是非引用的“自动”变量,其是直接存“值”,置于栈中。