是的,它们已被复制,这就是为什么您必须将变量声明为final的原因。这样,可以保证在完成复制后它们不会更改。
对于实例字段,这是不同的,即使不是最终字段也可以访问。在这种情况下,内部类将获得对其为此目的所使用的外部实例的引用。
private Environment env; // a field does not have to be finalpublic void init() { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { env.close(); } });}其次,这样做会引起性能问题吗?
比起什么?您需要具有字段或变量来使内部类工作,而复制是一种非常有效的方法。无论如何,它只是一个“浅”副本:仅复制对(在您的示例中)环境的引用,而不是环境本身。



