为什么要加final? final StringBuffer sb = new StringBuffer();
final StringBuffer sb = new StringBuffer();
7分47秒老师改成final,也没说为什么
final StringBuffer sb = new StringBuffer();
7分47秒老师改成final,也没说为什么
2015-08-08
局部内部类(包括匿名局部内部类和普通内部类)中使用局部变量,那么这个局部变量必须使用final修饰。这里说的是局部内部类,不是普通静态内部类和非静态内部类,因为他们不能访问方法体内的局部变量。
java要求所有被局部内部类访问的局部变量都是用final修饰,是因为:对于普通局部变量他的作用域就是该方法内,当方法结束该局部变量就随之消失;但局部内部类可能产生隐式的“闭包”,闭包将使得局部变量脱离他所在的方法继续存在。由于内部类可能扩大局部变量的作用域,如果再加上这个被内部类访问的局部变量没有使用final修饰,也就是说这个变量的值可以随时改变,那将引起极大的混乱,因此java编译器要求所有被内部类访问的局部变量必须使用final修饰符修饰。
举报