本人是java初学者,对于基本变量的内存分配有点疑问:我们知道基本变量和类的引用都是放到堆栈里的,那么定义变量的时候,会把先定义的先放到堆栈里即压栈,那么我要是使用先定义的变量,那么比它后压栈的变量就得先出栈,是这样吗??比如:class A
{
 private int x=2;
 private int y=3;
 
 
}是先把变量x放到栈底的,然后再把变量y放到x之上的,那么此时我要使用变量x的值,那么是不是y先要出栈呢???如果是的话,要是定义很多变量,要是想使用第一个进栈的,岂不是后进栈的都得先出栈????那位高手能给解释一下!!!

解决方案 »

  1.   

    class A
    {
     private int x=2;
     private int y=3;
      
     
    }
    x和y在这里是对象的成员,是分配在堆中的(不考虑特殊优化情形)。像这种,
    void func()
    {
        int x = 1;
        int y = 2;
    }
    这样的变量x和y会放在栈中。
    出栈顺序是个很诡异的命题,一般一个函数栈帧的大小是编译时就确定大小的,所以可以认为是一个整体,所以也不好考虑x和y谁先谁后的问题。
    这里需要把内存管理中的栈和数据结构中的栈区分一下。
      

  2.   


    zangxt总是把这类问题挖的很深,值得学习,这里确实是要把数据结构中的栈和内存管理中的栈分开,分配内存的空间没有“先后”顺序吧!