1
我遇到了下面的代碼,想知道每個Tree實例是否會引用不同的EMPTY對象,或者它是否會爲所有樹實例引用相同的對象(僅實例化一次)。Java:初始化東西的次數
class Tree<T> {
public final Tree<T> EMPTY = new EmptyTree<T>();
/** True iff THIS is the empty tree. */
public boolean isEmpty() { return false; }
private static class EmptyTree<T> extends Tree<T> {
/** The empty tree */
private EmptyTree() { }
public boolean isEmpty() { return true; }
}
...
}
我的直覺是,它必須是'公共靜態最終......'只有一個對象要在EMPTY類中初始化。
從page 99-100 of Data Structures Into Java
正確答案。在Java中通常都是如此,但有一個例外:String interning。 Java的一些實現可以回收'String'對象,而不是總是實例化一個新對象。請參閱:http://stackoverflow.com/q/10578984 –
它來自教科書;我添加了EMPTY引用的EmptyTree類的一部分。文中說:「只有一個空樹(保證是因爲EmptyTree類是Tree類的私有,是Singleton設計模式的一個例子),但是這棵樹是一個完整的對象......」所以我很困惑因爲它似乎(如果我提供了相關的代碼)像許多實例將被創建而沒有「靜態」,並且Singleton模式只允許創建一個全局對象。 (對不起,如果我是迂腐的,當我對某事感到困惑時,我儘可能清楚) – Rdesmond