请教大家,关于 string 的 immutable

2021-08-17 18:54:50 +08:00
 RedBlackTree
大多数语言的 string 类型是 immutable 不可变的,这个不可变是单纯地由编译器类型检查保证,还是 string 所在的内存是 read-only 呢?
换句话来讲,是否可以在运行时,分配只读内存中的空间,创建不可变的变量呢?
1431 次点击
所在节点    程序员
5 条回复
powerman
2021-08-17 19:13:20 +08:00
看看 String 实现不就好了 ,java 里面的+号 也不过是一个语法糖,不过一大部分人的计算场景来讲,根本不用考虑字符串这个问题
powerman
2021-08-17 19:13:47 +08:00
@powerman 带来的性能影响问题 少之又少
1194129822
2021-08-17 19:34:19 +08:00
思而不学则殆
des
2021-08-17 20:04:36 +08:00
只是编译器 or VM 保证了不变吧,看这个
https://stackoverflow.com/questions/20945049/is-a-java-string-really-immutable
secondwtq
2021-08-17 20:04:38 +08:00
还是要分清 specification 和 implementation

> 语言的 string 类型是 immutable 不可变的
(是不是”大多数“就不扯了)
这是 specification 规定的

> 由编译器类型检查保证
这是 implementation 用来 enforce specification 的手段

> 所在的内存是 read-only
这是 implementation 在特定条件下,以不违反 specification 前提做的优化

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

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

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

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

© 2021 V2EX