字符串被设计成 final 且不可变的和符号引用有关吗?

2019-11-20 23:35:39 +08:00
 1oNflow
看到有文章总结了这样设计的原因
1.为了实现字符串池
2.为了线程安全
3.为了实现 String 可以创建 HashCode 不可变性

另外 class 文件里的符号引用也是用字符串(这里的字符串还是 java 里的 String 吗)存储的,为了保证符号引用转直接引用的安全性,这是不是也是 String 不可变的原因之一?
2626 次点击
所在节点    Java
4 条回复
misaka19000
2019-11-20 23:40:33 +08:00
根本原因在于防止误修改吧,类似于 Python 里的 global
aguesuka
2019-11-21 00:58:06 +08:00
effective java 最小化可变性
hinate
2019-11-21 09:26:45 +08:00
符号引用是字符串,这个字符串包含足够的信息,以供实际使用时可以找到相应的位置。
符号引用会被替换为直接引用,下次就不用搜索了。直接引用就是偏移量,通过偏移量虚拟机可以直接在该类的内存区域中找到方法字节码的起始位置。
zappos
2019-11-21 10:55:38 +08:00
你自己尝试一下,字符串各种操作是新生成字符串方便还是在原字符串上改动方便。

结论就是不可变字符串在时间上不弱于可变字符串,在空间上由于有了常量池甚至更优。

这才是字符串默认不可变的原因。

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

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

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

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

© 2021 V2EX