2013-11-23 24 views
1

是否有任何未來的問題,如果我的toString返回字符串的靜態參考: -toString爲每個特定類的對象返回相同的字符串?

public static String example = "any problem"; 

    @Override 
    public String toString() { 
     // TODO Auto-generated method stub 
     return example; 
    } 
+6

你確實意識到,當你試圖打印這個類的實例的'toString()'時,你會總是得到相同的輸出。這樣你就無法區分這些實例(至少在試圖打印它們時)。 – SudoRahul

+1

不,這可能不是很有用。 – Henry

+1

爲了得到一個相同的字符串,你爲什麼要調用一個對象函數,你可以簡單地在你的代碼中硬編碼 –

回答

2

因爲字符串是不可變的,所以沒有調用者可以改變任何其他調用者具有的基礎字符串引用;因此它是安全的。然而,它並不是非常有用,因爲該類的所有實例都共享此值 - 爲什麼不使用return this.getClass().getName();(如果這是您想要的)?

+0

即使我不知道爲什麼,我的朋友的發展負責人要求他這樣做,而且因爲我的同班同學的對象不同了,所以我認爲他最終可能會陷入混亂,但現在沒關係..謝謝! –

1

不,這是完全正常的。我認爲,爲清楚起見,我將使用以下方法來強調它是靜態的,不應該被改變(與你的實際的類名稱替換ClassName):

public static final String example = "any problem"; 

@Override 
public String toString() { 
    return ClassName.example; 
} 

否則,雖然它的罰款。我不完全確定你爲什麼想要爲每個實例返回相同的toString();理想情況下,它應該唯一地代表一個類的不同實例,如果它適合你的情況。

小旁註:我刪除了// TODO評論。

2

沒有問題,但是toString方法用於表示對象狀態,而不是類的狀態,所以您可能需要重新考慮toString實現。此外,你的字符串是公開的,任何人都可以修改。

0

如果您問是否在稍後修改變量時遇到問題,答案是否定的。您可以修改靜態變量。

+0

沒有@Chris Ogle這是關於區分對象..感謝。 –

相關問題