程序員通常會想要操作String對象。在java中,String對象的工作方式是每次處理字符串時都會創建一個新對象。這非常耗時。我知道有一個允許可變字符串的Stringbuffer類,但我想了解爲什麼Java建議字符串應該是不可變的?這在其他編程/腳本語言中也是常見的事情?爲什麼String對象在java中是不可變的?
-1
A
回答
5
這裏是對一般http://www.javapractices.com/topic/TopicAction.do?Id=29
使用不可變對象的好處使用不可變對象的優點,一個漂亮的文章:
- 是簡單的構建,測試和使用
- 自動線程 - 安全並且沒有同步問題
- 不需要複製構造函數
- 不需要實施克隆
- 允許的hashCode使用延遲初始化,並緩存它的返回值
- 不需要被防守複製爲現場使用時
- 好好地圖鍵和SET元件(這些對象不能改變 狀態,而在集合中)
- 有自己的班級不變的構造時建立的一次,它 永遠需要再次檢查
- 始終有「失敗原子」(由約書亞布洛赫所使用的術語):如果一個 不可變對象拋出一個異常,它從來沒有留在 不受歡迎或不確定的狀態
+2
也是的,這是非常普遍的 – Ben
0
在語言中,不變性有幾個有用的優點。他們可以自由共享;不需要複製開銷等等。一個不可變對象只有一個狀態。許多其他語言(如Python,C#)使用不可變的字符串。
相關問題
- 1. 除了Java中的String之外,什麼是不可變對象?
- 2. Java中的String對象是不可變的嗎?
- 3. 我不明白爲什麼在Java中不可變對象inherrently總是線程
- 4. 什麼是不可變對象?
- 5. 爲什麼不在String中使用Java?
- 6. 爲什麼不可變的對象拋出UnboundLocalError但可變的對象不?
- 7. 什麼是java中的「String ...」?
- 8. 爲什麼不可變對象是線程安全的?
- 9. django - 爲什麼request.POST對象是不可變的?
- 10. 爲什麼鍵在Java中是不可變的?
- 11. 的Java對象 - >的String []爲String []
- 12. 在這種情況下String對象是不可變的嗎?
- 13. Java String是不可變的嗎?
- 14. 爲什麼在不可變對象中使用getter而不是公用字段?
- 15. 爲什麼在雙重檢查鎖定中不可變對象是安全的?
- 16. 爲什麼有必要將Response對象而不是String對象返回給java中的http請求?
- 17. 爲什麼在Java中,(「string」)。equals(var)推薦的不是(var).equals(「string」)?
- 18. 爲什麼在java 7中不是Files.readAllLines(String path)?
- 19. 爲什麼我的不可變對象突變Scala
- 20. 爲什麼java中的字符串是不可變的?
- 21. 在Java中創建不可變對象
- 22. 爲什麼的std :: string對象可以調用的CString ::格式
- 23. Java是否優化不可變對象?
- 24. 爲什麼我在Java String中有?
- 25. 對象不可變與對象的引用是不可變的是什麼區別?
- 26. 不可變的,爲什麼我使用fromJS的嵌套對象在使用重選時不是不可變的
- 27. 爲什麼Math是一個對象而String是一個函數?
- 28. 對象<String>是什麼意思Java?
- 29. 爲什麼string []被解釋爲object [],而不是對象,但我們可以分配object obj = new string []?
- 30. 什麼是java中的標準對象?
http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ – OldProgrammer
Keeto - 請在提問之前查找相關的問題和答案。正如你所看到的,這個特定的問題之前已經被問及過幾次。 –
Keeto - 如果您覺得您的問題無論如何都有要求,請確保您清楚地說明您的問題有哪些不同之處。請注意*「我不喜歡/理解/相信答案」*不是提出重複問題的理由。如果您想要更好的答案,請在現有問題上提供獎勵。 –