![]() |
1
4
Foo不会被垃圾收集,因为在引擎盖下,bar会包含对它的引用。 foo需要是final的原因是为了避免这个隐藏的引用失去同步。 从垃圾收集的角度来看,即使foo不是final,它也是安全的。但是bar持有的对foo的引用是在创建bar时分配的,并且从未更新过,因此如果允许包含方法稍后将其他内容分配给foo,bar仍然会看到“old”对象。
|
![]() |
2
0
它可以是安全的,但这取决于内部类在做什么。
变量也需要是final。这是一种语言限制,用于防止内部类在运行时更改变量的引用。这有点痛苦,如果它是语言的一个隐含而不是显式的特征,那就太好了。 |
![]() |
3
0
如果你做的是正常的事情(不是通过反射或其他方式来攻击类加载器),那么它是非常安全的。正如其他人提到的,有一个从内部到外部对象的隐式引用(只要内部类不是静态定义的),所以它不会被垃圾收集。 根据经验,有 根本不可能
|
![]() |
4
0
你的代码无法编译,所以你的问题毫无意义。当你放入所需的“final”修饰符时,代码会编译并且是安全的,这就是“final”修饰符所表达的意思。 |