2015-02-23 19 views
-1

如果您構建一個對象,並說「Intruder」並將其定義爲final,那麼您仍然可以更改此類對象字段,這些字段在類定義中不是最終的(即Intruder.power = 50)。 在這種情況下的限制將是關於入侵者的對象引用而不是內部值。更改Java中的最終字符串值

我的問題是:以字符串爲例? 如果你創建一個String對象,就像「String s = new String(」str「); 有沒有辦法改變字符串的」str「值? 如果不是,那爲什麼不能改變該String對象,而不改變它的字面意義的參考?

謝謝!

+2

不是。原因實際上非常簡單:字符串沒有任何公共字段,也沒有任何方法可以讓您更改字符串。 (一個奇特的說法是說它是*不可變的*) – immibis 2015-02-23 02:24:32

+0

這是因爲沒有公共方法允許您更改其私有屬性。 – Christian 2015-02-23 02:26:11

回答

1

正如其他答案所述,字符串是不可變的。 StringBuilderStringBuffer更多的是你想要的,如果你想改變關於字符串的東西的能力。

3

沒有沒有,因爲字符串是不可變的。當您在字符串中使用的方法是創建一個新的字符串對象。

+0

你的答案很混亂。如果字符串不可變,則不能更改字符串。 – m0skit0 2015-02-23 02:29:42

+1

他的回答是正確的,因爲你從來沒有真正改變一個字符串。當你給一個String對象賦一個新的值時,用新值替換它,而不是修改前面的String。 – deyur 2015-02-23 03:09:00

0

這是不可能的,字符串是不可變的,這意味着它們不能被改變,如果我這樣做的話:

String name = "John" 
name.substring(2); 

什麼都不會發生。一個新的字符串將被返回,永遠不會被分配給任何東西。