2011-12-16 65 views
2

Go語言是否像在Java中一樣使用Copy-on-write字符串?即如果我通過值傳遞一個字符串給一個方法,而不改變它,這將分配內存和複製字符串(這將是時間效率低下),或者它只會引用一個副本。Go語言是否使用Copy-on-write字符串

+1

「copy-on-write ... as in Java」是沒有意義的。對象不是Java中的值;只有引用是。在任何情況下,傳遞一個引用永遠不會複製它指向的對象。傳遞或分配引用始終會引用與原始引用相同的對象。一個對象不會被複制(不是「寫入」),除非您通過某種方法明確地複製對象,並獲取對新對象的引用。 – newacct 2011-12-16 11:38:55

回答

16

它不是Copy-on-Write,因爲字符串是不可變的。但共享一個字符串不會複製底層內存區域。在Go中,一個字符串表示爲(長度,數據)對。如果傳遞一個字符串,Go將複製長度和指針,但不會複製指向的數據。

欲瞭解更多信息,請參閱this recent thread on golang-nuts

2

圍棋類型string實際上等同於java.lang.String。這兩個實現(在Go運行時,在JVM中)也很相似,儘管它們不相同。就傳遞函數和方法的參數而言,Go字符串的性能類似於Java字符串。