3

Integer、Character、Double 等——所有这些都是不可变的类,如 String。String 有 Stringpool 来节省内存,但为什么这些包装器没有类似的池?

我已经检查过:整数有一个类似的池,最多只有 127 个,但不会超过这个。

4

2 回答 2

5

除非有人可以从 Gosling 等处找到设计文档。al.,大约在 1994 年左右,专门解决了这个问题,无法肯定地说。

一个可能的原因是复杂性和开销被认为不值得。字符串 A)比,大得多,B),更常见,等等,因为大多数人尽可能使用原语,只在无法避免的情况下使用包装器。IntegerLong

于 2015-04-19T18:35:55.737 回答
1

IMO,String是java中最常用的类型。作为加载类的参数,连接到数据库/网络连接的参数,存储(几乎)每一件事 - 列表很长。在任何应用程序中,与 String 相比,其余其他原语/包装器类型组合在一起的使用场景也可以忽略不计。

如果以未优化的方式使用(例如,在没有 Stringpool 的情况下实现),性能将会受到影响 - 因此拥有一个(仅)String 池确实有意义。

于 2015-04-19T19:23:56.567 回答