假设在一个类中定义了全局变量:int  a  =  12; 请问"a"和"12"分别存储在内存的哪个地方呢?同理,对于一个方法中定义的局部变量int  b = 20;呢,这里的“b”和“20”的空间又是被分配到了内存的哪个地方呢?求赐教,谢谢!

解决方案 »

  1.   

    java中只有3种
    局部变量——在函数体中定义
    成员变量——class成员
    静态变量——class静态成员没有所谓全局变量,那是C/C++的东西另外学JAVA你就不要管他存储在内存哪个地方了,那是C/C++程序员做的事情。JAVA这门落后的语言连指针都没,C#里是可以在unsafe代码块中使用指针的!如果你是新手,那么我建议放弃Java 去学C#!
      

  2.   

    http://www.ticmy.com/?p=151
      

  3.   

         静态区里面,去看一下视频吧,全局变量是在静态区的。1.
    栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
    4、文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。
    5、程序代码区 — 存放函数体的二进制代码。
      

  4.   

    如果你是新手,那么我建议放弃Java 去学C#!
      

  5.   

    java中只有3种变量:
    局部变量——在函数体中定义
    成员变量——class成员
    静态变量——class静态成员
       java程序在硬盘里存放,首先被加载到内存里,其次由操作系统找到main方法执行,再次执行过程中转化成操作系统代码。执行中的内存管理为:1.new出来的东西被分配在heap(堆区)。2.局部变量被分配在stack(栈区)。3.静态变量和字符串常量被分配在data segment(数据片段)里。4.代码被存放在code segment(代码片段)里。
        因此本题变量a 是成员变量,它的值12被分配在heap区,变量名a 就是存储该整形类型数据12所在的内存块,代表的不过是个存储空间的名称;如果是静态变量的话,声明初始化为:static int a = 12;
       局部变量b 的值20被分配在 stack里,变量b 就表示存储该值20的内存空间。
      

  6.   

    这位仁兄到处喷屎,有本事你就用CSharp消灭Java
      

  7.   

    函数内的变量是被分配在栈上的。
    对于简单型常量(int, char等),编译的时候它是被编写到指令里面的,运行的时候直接从内存中载入寄存器,即所谓的寄存器寻址。
      

  8.   

    java里没有指针是有原因的。而且这个问题应该从两方面看,第一C/C++有指针是他的优点,效率高;但是同时也很危险,因为在分配内存时,如果忘了释放,容易造成内存泄漏的问题,这反而成了他的缺点,所以指针是把双刃剑,就看你怎么用了。第二,java没有指针就避免了如果忘了释放内存造成内存泄漏的问题,因为java有垃圾回收机制。
      

  9.   

    首先说明一下java中的变量分类:
    java中的变量分为成员变量和局部变量。成员变量有分为实例变量(非static变量)和类变量(static变量);局部变量分为形参、方法内部的变量、代码块中的变量。
    全局变量一般在接口中定义,如:
    public static final int SIZE = 50
    用一段代码来说明一下:
    public class MyVariable{
    public static void main(String[] args){
    MyVariable mv = new MyVariable();
    mv.show();
    }
    public void show(){
    int b = 20;
    System.out.println(b);
    }
    }
    b在内存中的分布(如图):mv是引用类型变量,存储在栈内存中,而对象本身(以及对象中的变量)被存放在堆内存中
    这是个人理解,请指正。
      

  10.   

    将.class反编译一下 你懂点汇编的话就会看到你想要的答案