2012-06-08 63 views
2

我有下面這樣的程序問題爲什麼在Java中的String.Replace之後沒有更改String值?

請參考下面

public class Kiran { 

    public static void main(String args[]) { 

     String str = "Test"; 

     str.replace('T', 'B'); 

     System.out.println("The modified string is now " + str); 
    } 

} 

我所期待的是,一旦我運行這個程序,我應該看到putput爲最佳方案,但我驚訝的輸出是測試。

有人可以請告訴我,爲什麼這樣?

在此先感謝。

+0

爲什麼*會改變*?請使用[文檔](http://docs.oracle。com/javase/7/docs/api/java/lang/String.html)提供支持信息。 (許多「爲什麼不」問題可以通過查看「爲什麼/如何做」來回答或提煉。) – 2012-06-08 15:16:05

回答

13

字符串在Java中是不可變的,這意味着你不能改變它們。當你調用replace方法時,你實際上正在創建一個新的String。

你可以做到以下幾點:

String str = "Test"; 
str = str.replace('T', 'B'); 

這是一個重新分配。

6

String.replace不會更改字符串內容,但會返回替換結果。 你應該做到以下幾點,而不是

str = str.replace('T', 'B'); 
+0

非常感謝您的解釋。 – Pawan

+0

當然沒問題:) – GETah

2

字符串在Java是不變的 - 它們不能被改變。當你使用像str.replace這樣的函數,而不是在原地更改字符串時,它會返回一個新的String對象,其中包含您請求的更改。這在documentation for String中有解釋:

返回一個新字符串,它是用newChar替換此字符串中出現的所有oldChar。

爲了將來的參考,Java的文檔非常全面,詳細解釋了方法期望的參數,返回的內容以及它們具有的副作用(如果有的話)。

2

字符串類是不可變的。因此,無論您在String對象上執行什麼操作,都會返回一個新的字符串對象。

您必須將replace操作的結果分配給一個String變量,以便您可以獲得結果。

0

除了上面的答案,如果您要修改(添加/刪除)廣泛的數據,您最好使用StringBuffer(線程安全)或StringBuilder(不是線程安全的)&將其強制轉換爲String完成修改。

1

String對象在java中是不可變的,即無論何時在String上完成修改而不是修改它,都會在內存中創建新的String對象。

方法str.replace('T', 'B')在堆內存中創建了一個新的String對象,但該對象未被任何字符串變量引用。要引用該對象,您必須將其分配給您的String變量:

str = str.replace('T', 'B'); 
相關問題