2014-11-16 104 views
-1

程序員通常會想要操作String對象。在java中,String對象的工作方式是每次處理字符串時都會創建一個新對象。這非常耗時。我知道有一個允許可變字符串的Stringbuffer類,但我想了解爲什麼Java建議字符串應該是不可變的?這在其他編程/腳本語言中也是常見的事情?爲什麼String對象在java中是不可變的?

+2

http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ – OldProgrammer

+1

Keeto - 請在提問之前查找相關的問題和答案。正如你所看到的,這個特定的問題之前已經被問及過幾次。 –

+0

Keeto - 如果您覺得您的問題無論如何都有要求,請確保您清楚地說明您的問題有哪些不同之處。請注意*「我不喜歡/理解/相信答案」*不是提出重複問題的理由。如果您想要更好的答案,請在現有問題上提供獎勵。 –

回答

5

這裏是對一般http://www.javapractices.com/topic/TopicAction.do?Id=29

使用不可變對象的好處使用不可變對象的優點,一個漂亮的文章:

  • 是簡單的構建,測試和使用
  • 自動線程 - 安全並且沒有同步問題
  • 不需要複製構造函數
  • 不需要實施克隆
  • 允許的hashCode使用延遲初始化,並緩存它的返回值
  • 不需要被防守複製爲現場使用時
  • 好好地圖鍵和SET元件(這些對象不能改變 狀態,而在集合中)
  • 有自己的班級不變的構造時建立的一次,它 永遠需要再次檢查
  • 始終有「失敗原子」(由約書亞布洛赫所使用的術語):如果一個 不可變對象拋出一個異常,它從來沒有留在 不受歡迎或不確定的狀態
+2

也是的,這是非常普遍的 – Ben

0

在語言中,不變性有幾個有用的優點。他們可以自由共享;不需要複製開銷等等。一個不可變對象只有一個狀態。許多其他語言(如Python,C#)使用不可變的字符串。

相關問題