②在局部内部类中使用了str1,那么str1就会在底层实现的时候被加上final修饰(实质上是一个语法糖),并且不能被在方法中(尽管是在局部内部类外)被修改;
③但若是在方法中(局部内部类外)试图改变str1的值,那么str1将被认为是非final的。如果此时还想再局部内部类中使用,则会报错(在局部内部类中报错)
原因: 首先需要知道的一点是:内部类和外部类是处于同一个级别的,内部类不会因为定义在方法中就会随着方法的执行完毕就被销毁.

这里就会产生问题:当外部类的方法结束时,局部变量就会被销毁了,
但是内部类对象可能还存在(只有没有人再引用它时,才会死亡)。这里就出现了一个矛盾:内部类对象访问了一个不存在的变量。为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的”copy”
错误示范图片说明
public void test(int a){
//int c=0;
class aa{
public void get(){
a++;
System.out.println(a);
}
}
new aa().get();
}
图片说明