我有兩個類使用相同的String
值,並將它們存儲爲最終的專用字段。Java如何處理跨實例的最終字段?
public class Foo{
private final String str;
private final Bar bar; //notice this
public Foo(String in){
this.str=in;
this.bar=new Bar(in); //option 1
this.bar=new Bar(this.str); //option 2
}
}
這裏來Bar
:
public class Bar{
private final String boo;
public Bar(String in){
this.boo=in;
}
}
- 不Java軟件商店相同的對象無處不在,或者它做一個拷貝給每個實例*?
- 對於選項1和2,您的答案是否相同?
* 直覺暗示在前者,但你永遠無法確定與Java。
方問題:
我想要做的是這樣的:Foo
確實對str
一些處理,並使用Bar
作爲一個工具類。概念上Foo
和str
緊密連接在一起,但除構造函數外,Foo
不直接再次觸摸str
,而只通過Bar
。
我想過從Foo的字段中刪除str
,因爲擔心Java會分配兩次相同的字符串,這引發了這個問題。但是從軟件工程/代碼正確性的角度來看,我應該刪除它嗎?
_但是你永遠無法確定與Java._ Java語言規範是非常清晰的,如果你閱讀它。 –
'final'與被引用的實際對象無關。它僅限制變量。 –
我認爲'final'在編譯時被視爲與C的'const'相同。我想錯了。我可以閱讀[整個規格](http://docs.oracle.com/javase/specs/)...或作爲一個問題在這裏;) – rath