2013-11-15 92 views
1

我現在正在學習Java,但我遇到了一個問題。 我想讓它每次運行我的代碼時都會向字符串中添加一個字符。每次運行代碼時都會在字符串中添加一個字符

這是我在這一刻:

StringBuilder amountReady = new StringBuilder(); 
amountReady.append("|"); 

但是當我運行第二次這樣的代碼,它忘記了所有關於第一個「|」,只是開始了一個「|」而不是兩個。

由於提前,

〜裏克

+2

您每次創建一個新對象。 –

+2

此外,「每次運行我的代碼」時,是指一個程序中的多個方法調用,還是一個程序的多個運行?其中一個比另一個容易得多。 –

回答

4

你設置你的amountReadynew StringBuilder()對象運行此代碼,您的每一次。 A new默認情況下,StringBuilder爲空。

取而代之的是,將行:StringBuilder amountReady = new StringBuilder();添加到它的方法之外......這樣,amountReady變量將已經存在,並且您可以像附加到它那樣。

+0

不,你可能不應該那樣做,因爲'StringBuilder'不是線程安全的。如果線程安全性可能受到影響,請改用'StringBuffer'。 –

+0

@MartinAndersson嗯,聽起來OP是Java相對較新的,所以程序可能會是單線程的。不過要注意一點。 –

+0

他沒有提到線程,只是將'StringBuilder'放在類頭中並不會固有地使其非線程安全。 – SnakeDoc

0

每當您使用保留字「新」,您正在創建一個新的對象。每次執行上面的代碼時,都會創建一個新對象(以便可以存儲在amountReady中的舊對象從內存中取消分配)並使其存儲一個單個字符。

如果你的問題是關於如果你執行一個Java應用程序對象時,是否仍舊在內存中,那麼答案絕對不是。

0

如果必須在程序的各個運行之間保留,則需要將它寫出到文件或數據庫中,並且每次都將其讀回。

一個文件對於像這樣的小練習來說肯定會更容易。 Java對文件系統有很好的支持。谷歌的「java文件」,並看看。這很容易實現,並且在Stack Overflow上有很多例子。

0

http://ideone.com/XjHKwb檢查此;你可能不需要一個方法作爲appendString;您可以將整個代碼添加到主要方法中。我們可以刪除靜態等,我只是提供一個有用的想法。

private static StringBuilder amountReady = new StringBuilder(); 
public static String appendString(String str) 
{ 
    amountReady.append(str); 
    return amountReady.toString(); 
} 
public static void main (String[] args) throws java.lang.Exception 
{ 
    for(int i=0; i<10; i++) 
    System.out.println(appendString("|")); 
} 
+0

你永遠不應該添加'拋出異常'方法。你能提一個在Java中沒有的方法嗎?事實上,你沒有增加任何價值。但是你所做的是有效地銷燬你的IDE必須通知你的方法中的代碼拋出的未處理的異常。這條規則只有一個例外:如果我告訴你的是你想要的。例如,如果你編寫一個期望拋出異常的單元測試方法,可能就是這種情況。 –

相關問題