a不是在调用f()就消失了
a在内存的静态存储区域

解决方案 »

  1.   

    a是在调用完f() 后,就消失了。a分配在常量区里,和通过new操作符创建出的对象放的位置不同,后者是放在堆(heap)中,堆中的对象有GC负责回收释放。
      

  2.   

    a的作用范围就在f()中a分配在哪里并不重要,不过一般情况下简单值变量放在栈中效率最高
      

  3.   

    那如果我把final int a=8;替换成:final String a="fafa";
    那么当我调用完f() 后,String a会被垃圾回收马??
      

  4.   

    也会被释放的,String a="fafa";这种字符串放在字符串常量区,String b = new String("fafa");这种字符串放在堆里。这是两种不同的对象。
      

  5.   

    java的变量是传值的,只有对象才是传地址。
    这样理解,就清楚了。
      

  6.   

    我想final的作用不仅仅是使它成为常量。他还有别的作用。
    大家看看这段代码:
    注意变量s是定义在方法内部的局部变量。
    class D
    {
    public void g(){};
    }
    class A
    {
    public D f()
    {
    final String s="fafa";
    class B extends D
    {
    public void g()
    {
    //error: s must be final
    System.out.println(s);
    }
    }
    return new B(); }
    }
    public class Test
    {
    public static void main(String [] args)
    {
    A a=new A();
    D d=a.f();
    d.g();
                      d.g();//调用两次,没有问题。那就说明s不能在第一次调用完就
    失效,我想这个效果是和final修饰有关系的。   
    }
    }