Go語言是否像在Java中一樣使用Copy-on-write字符串?即如果我通過值傳遞一個字符串給一個方法,而不改變它,這將分配內存和複製字符串(這將是時間效率低下),或者它只會引用一個副本。Go語言是否使用Copy-on-write字符串
2
A
回答
16
它不是Copy-on-Write,因爲字符串是不可變的。但共享一個字符串不會複製底層內存區域。在Go中,一個字符串表示爲(長度,數據)對。如果傳遞一個字符串,Go將複製長度和指針,但不會複製指向的數據。
欲瞭解更多信息,請參閱this recent thread on golang-nuts。
2
圍棋類型string
實際上等同於java.lang.String
。這兩個實現(在Go運行時,在JVM中)也很相似,儘管它們不相同。就傳遞函數和方法的參數而言,Go字符串的性能類似於Java字符串。
相關問題
- 1. 使用go語言與gitolite
- 2. 檢查是否字符串包含在語言(序言)
- 3. 訪問一個字符串作爲在字符串中使用的字符數組.Join()方法:GO語言
- 4. 語言L = {沒有子字符串'bb'}的字是否正常?
- 5. 是否準備好爲MongoEngine使用多語言字符串字段?
- 6. 語言字符串ADT
- 7. 語言字符串解析
- 8. 是否有交叉編程語言字符串格式?
- 9. 如何判斷一個字符串是否使用不同的語言。 (非ASCII)
- 10. Go語言的副作用
- 11. 使用build GO語言依賴關係
- 12. For循環使用Go編程語言
- 13. 使用什麼語言編寫Go編程語言?
- 14. 在Go編程語言中,是否有可能將變量的類型作爲字符串獲取?
- 15. ReDim語句是否使用空字符串初始化字符串數組?
- 16. 更改字符串中的字符 - 不完全是C語言
- 17. Go中的字符串是什麼?
- 18. 字符/語言
- 19. 如何使用Go語言檢查zip條目是否爲目錄
- 20. 是否有適合go語言的RETS包?
- 21. 字符串長度與其他語言不同......不是英語
- 22. 檢查字符串切片是否包含特定值Go
- 23. 驗證該字符串是否屬於特定語言字母表
- 24. 在Go中引用字符串文字
- 25. 用C語言中的另一個字符串替換字符串字符
- 26. Go語言中的墳墓
- 27. 返回菜單語言GO
- 28. 從語言代碼獲取語言字符串
- 29. 檢查字符串是否在字符串中重複使用
- 30. 使用「in」檢查字符串中是否出現字符串
「copy-on-write ... as in Java」是沒有意義的。對象不是Java中的值;只有引用是。在任何情況下,傳遞一個引用永遠不會複製它指向的對象。傳遞或分配引用始終會引用與原始引用相同的對象。一個對象不會被複制(不是「寫入」),除非您通過某種方法明確地複製對象,並獲取對新對象的引用。 – newacct 2011-12-16 11:38:55