为什么 Go 和 Java 的 String 都要设计成 immutable?

2015-02-19 18:19:46 +08:00
 snnn
为什么Go和Java的String都要设计成immutable? 这样做有什么深意吗?
2452 次点击
所在节点    Go 编程语言
26 条回复
denghongcai
2015-02-20 01:20:29 +08:00
@hx1997 只要上面没写明是机器翻译的,就是人工校对过的,我还真没发现和英语版本有什么区别,都是严谨的
hx1997
2015-02-20 02:01:00 +08:00
@denghongcai 当然没区别了,逐字逐句翻译的呢。

Preparing to recycle...
正在准备 重循环

The memory could not be "written".
内存不能为"written"。

Enables the compiler to create a single copy of identical strings in the program image and in memory during execution.
启用编译器在程序映像和执行时的内存中创建相同字符串的一个副本。
xiaowangge
2015-02-20 07:21:43 +08:00
ovear 你的笔记借鉴 张龙老师的了(^_^)
reus
2015-02-20 18:55:33 +08:00
go里的string就是不可写的[]byte,所以这只是一种补充。string可以作为map的key,可以按rune来range。所以如果需要可变的字符串类型,就用[]byte或者[]rune即可。
ovear
2015-02-21 19:09:39 +08:00
@xiaowangge 0 0 对。。刚好百度到那时候,看的讲得不错就拷过来啦。。后来一直想不起是谁讲的_(:з」∠)_
knightzorro
2015-02-25 10:01:43 +08:00
不仅java go, c# python lua等语言里面的字符串也是不可变的,究其原因,我贡献一个不是那么理论化的观点,string用的太多,string实质上是个数组,使用的时候都是用引用(传值性能太差),这样就造成了一块内存多个reader,如果允许可变就是多个writer, 内容正确性没法保证。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/171803

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX