2013-04-20 90 views
5

我不知道Java中的字符串數組是否可變?我知道字符串是不可變的,但字符串數組又如何呢?字符串數組是否可變?

如果我有一個字符串數組,並更改內容,是否會創建一個新的字符串對象?或者,實際價值是否會改變?

預先感謝

+0

Java中的數組是可變的,它不依賴於數組類型,它們在任何情況下都是可變的。 – bsiamionau 2013-04-20 22:00:25

回答

13

包含在String[]String s爲確實不可變的,但該陣列是可變的。

這在this answer很好的解釋:

  • 不變性是指特定類型的對象可以以任何有意義的方式不能改變到外部觀察者
    • IntegerString等是不可變的
    • 通常所有值類型應爲
  • 數組對象是可變
    • 這可能是不可改變的類型的引用數組,但數組本身是可變的
      • 這意味着你可以設置這些引用到任何你想要
      • 也爲陣真的原語
    • 的不可變的陣列將是不實際的
  • 個對象引用可以共享
    • 如果對象是可變的,突變將通過所有這些參考文獻可以看出

編輯:

有點關係:Why can't strings be mutable in Java and .NET?

+1

好的答案,我也可以建議OP閱讀[這個問題](http://stackoverflow.com/questions/93091/why-cant-strings-be-mutable-in-java-and-net)得到,爲什麼java中的字符串是不可變的。 – bsiamionau 2013-04-20 22:04:49

+0

@zvzdhk在答案中添加了鏈接。謝謝。 – 2013-04-20 22:06:36

+0

任何洞察力WTF他們讓陣列在C#中不可變? – DanteTheSmith 2017-12-08 15:50:48

3

據我記得你的數組中的字段將引用另一個字符串

String[] array {"I","like","rain"}; 
array[2] = "sun" 

您的數組可以更改。絃樂本身沒有。

1

在數組中,每個元素只是一個指向對象的指針。所以,當你做這樣的事情

String one = "1"; 
String two = "2"; 
String three = "3"; 
String four = "4"; 
String[] myStringArray = {one, two, three}; 
myStringArray[2] = four; 

那麼這是在陣列的第三元素的指針現在指向代替。

相關問題