Мне интересно, действительно ли final
"замораживает" свою ссылку, заставляя ее базовый объект сосуществовать с любыми повторными назначениями, сделанными для исходной ссылки по другому пути, например,
class ThingHolder{
Thing thing;
}
class Thing{
int i=5;
Thing(int i){
this.i=i;
}
}
public static void main(String[] args){
ThingHolder thingHolder = new ThingHolder();
thingHolder.thing = new Thing(5);
final Thing aFinalReference = thingHolder.thing;
thingHolder.thing = new Thing(6); //will this now coexist with "aFinalReference"?
//...
}
Будет aFinalReference
теперь сохраняться как в независимом объекте, несмотря на то, что больше не является частью thingHolder
, и продолжать ссылаться на исходный Thing
(то есть тот, чей int
в настоящее время равен 5), независимо от теперь происходит с thingHolder
?