我想知道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
? 最佳答案
final
真正的意思是,一旦您分配了aFinalReference
,就无法重新分配它。
为了回答您将引用什么的问题,我们将逐步执行以下代码:
public static void main(String[] args){
ThingHolder thingHolder = new ThingHolder();
// create a new Thing (we'll call it "Thing5"),
// and point thingHolder.thing at it
thingHolder.thing = new Thing(5);
// thingHolder.thing now points to Thing5
final Thing aFinalReference = thingHolder.thing;
// aFinalReference now ALSO points to Thing5
// create a new Thing (we'll call it "Thing6"),
// and point thingHolder.thing at it
thingHolder.thing = new Thing(6);
// thingHolder.thing now points at Thing6 instead of Thing5
// aFinalReference, however, still points at Thing5
}
在
main()
的末尾:thingHolder.thing
将指向“ Thing6”aFinalReference
将指向“ Thing5”