2010-08-02 43 views

回答

13

String上沒有「set」方法。在Java中字符串是immutable。要更改String變量的值,您需要爲該變量分配一個不同的字符串。你不能改變現有的字符串。

(不創建一個新的String對象)

勘定不創建一個新的對象 - 它複製參考。請注意,即使你寫的是這樣的:

s = "hello"; 

不會創建一個新的字符串對象每次運行時間。字符串對象將來自字符串池。

2

字符串是不可變的,所以你不能改變已經創建的字符串的值。

4

實際上在Java中沒有辦法做到這一點,String對象默認是不可變的。

事實上,這就是爲什麼使用"+"級聯運算符(如"str1" + "str2")效率非常低的原因之一,因爲它的作用是複製每個字符串以產生第三個字符串。

根據您的需要時,你應該考慮使用StringBuilder

0

這取決於你的對象定義了一下。如果你的意思是參考,不。一個引用總是被創建。如果你指的是字符使用的內存,當然。

字符串被扣留(如果可能的話),這意味着在一個賦值:

String s1 = "Hello"; 
String s2 = "Hello"; 

有2名的引用(指向的存儲器位置),但Hello是在存儲器上只有1處。這是字符串無法修改的原因之一。

0

確定你可以通過反射訪問內部字符數組。但這樣做通常是個壞主意。更多關於http://www.eclipsezone.com/eclipse/forums/t16714.html

+0

它總是**一個壞主意。如果您需要可變字符串,請改用'StringBuilder'實例。 – 2010-08-02 13:06:32

1

String對象在Java中是不可變的,因此任何更改都會創建一個新的String對象。如果您想更改像對象這樣的字符串而不創建新對象,請使用StringBuilder。作爲一個獎勵,StringBuilder允許你預先分配額外的內存,如果你知道你的字符串的最終長度的東西。

1

我偶然發現這個問題,因爲我必須在「封閉類型」 - 一個匿名類型中設置一個字符串。但是我想要在內部設置並在外部使用的所有變量都必須是最終的。

簡單的解決方案是使用StringBuilder - 它是一個可變的字符串。

相關問題