当你在内部类中时,会自动把局部变量 A 复制一份成 B。 如果你是基本类型或者 final 修饰的类,当你每一次重新赋值的时候,直接修改 B,所以 final 修饰的类如 String、Integer 的修改是无法影响到 A 的。 如果局部变量 A 是一个普通类,那么传递的是地址,所有内部类中直接是不允许你直接对该实例重新初始化,但是可以使用该实例。 当然,当你重新声明与 A 同名的变量,那么直接是将声明实例后的结果覆盖掉 B。 所以说,当你在内部类中执行了'int n = 29;'后,是拿不到外部方法的 n,是因为你自己在内部类中用同名变量覆盖掉复制到内部类的结果 B。 个人见解,用内部类也不多,如果有错希望有大牛能够指出来。