有一个类叫BOX里面有变量i.然后我用BOX mybox=new BOX();有的书上说mybox是对象,但是有的书上说mybox只是一个变量,用来储存对象的地址的,真正的对象是BOX里面的变量,这些说话哪个是对的?

解决方案 »

  1.   

    BOX mybox=new BOX();
    mybox是个引用类型的变量,你可以认为它的内容是一个地址(这个和具体的jvm实现机制有关系),该地址表示对象在堆中的具体位置 。
      

  2.   


    mybox这个值在栈中,new 的BOX这个对象的信息在堆中,mybox的值是BOX对象的地址。
      

  3.   

    这个未必,比如
    class Test{
      BOX mybox=new BOX();
    }
      

  4.   

    这些话基本正确,mybox是对象的引用这个对象在堆里边
      

  5.   

    mybox 本来就是个实例变量 也叫对象变量 就是个对象啊
      

  6.   

    当JAVA程序运行时,系统会为JAVA程序分配一块单独的内存空间供JAVA虚拟机使用。JAVA虚拟机又把这块内存空间分为主要的三大区域,分别是:栈区、堆区及方法区。栈区:用来存放局部变量(即方法中定义的变量)。
    椎区:用来存放实例变量(即没有用static修辞的成员变量)。
    方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{
    public static void main(){
    Box mybox=new Box();
    }
    } class Box{
    int a=10;
    static int b=20;
    void make1(){};
    static void make2(){};
    }在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。
    mybox:是局部变量,在JAVA栈区中。
    a:是实例变量,在JAVA堆区中。
    b:是静态变量,在JAVA方法区中。
    main():main方法的字节码在方法区中。
    make1():make1方法的字节码在方法区中。
    make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。
      

  7.   

    当JAVA程序运行时,系统会为JAVA程序分配一块单独的内存空间供JAVA虚拟机使用。JAVA虚拟机又把这块内存空间分为主要的三大区域,分别是:栈区、堆区及方法区。栈区:用来存放局部变量(即方法中定义的变量)。
    椎区:用来存放实例变量(即没有用static修辞的成员变量)。
    方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{
    public static void main(){
    Box mybox=new Box();
    }
    } class Box{
    int a=10;
    static int b=20;
    void make1(){};
    static void make2(){};
    }在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。
    mybox:是局部变量,在JAVA栈区中。
    a:是实例变量,在JAVA堆区中。
    b:是静态变量,在JAVA方法区中。
    main():main方法的字节码在方法区中。
    make1():make1方法的字节码在方法区中。
    make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。
      

  8.   

    mybox 是对象的引用在栈上分配
    而他指向在堆上分配的对象 对象里分配成员变量
      

  9.   

     mybox 是一个引用类型的变量,mybox的值是BOX对象的地址
      

  10.   

    哪位大侠推荐本深入了解有关java运行时内存分配的书?
      

  11.   

    mybox是一个类的实例所以它肯定是个对象,当然它也是变量.至于说BOX里面被实例化了的变量,我们可否也认为是对象,这些对象组合成mybox对象.这可否理解成是组合的一种形式
      

  12.   

    BOX mybox=new BOX();
    -----------------------------------------------
    mybox只是一个BOX类类型的引用。
    当new BOX()生成一个BOX类型的对象后,就赋给BOX类类型的引用mybox
    mybox是变量,而它的值就是BOX类型对象的引用值