不会被释放。它修饰的变量已经被放到常量区。这一点在局部内部类那一块有很好的证明,请看下面这部分代码:
class Outer {
//在外部类中定义一个方法
public void method() {
final int num = 100;//用final修饰变量,便于内部类Inner继续使用。
//在方法中定义一个内部类,也就是局部内部类
class Inner {
public void show() {
System.out.println(num);
}
}
//创建对象,调用方法
Inner i = new Inner();
i.show();
}
}
class InnerClassDemo4 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
依然被释放。
这个可以用下面的代码验证
public static void main(String[] args) {
show();
System.out.println(a);
}
public static void show() {
final int a = 0;
System.out.println(a);
}
使用主方法调用show方法
show方法中定义了一个被final修饰的变量a
我们从show方法中打印a是没有问题的
假设,final变量在方法结束后不释放,那么我们在主方法中再次打印此变量也是可行的
经试验,报错,“a connot be resolved to a variable”,a 不能作为一个变量被访问