整数,字符,双精度等 - 所有这些都是像String这样的不可变类。 String有Stringpool来保存内存,但为什么这些包装器没有类似的池?
我已经检查过:Integer有一个类似的池,最多只有127个,但不超过这个。
答案 0 :(得分:4)
除非有人能从Gosling,et。找到设计文件。大约在1994年左右专门解决这个问题,这是不可能肯定的。
一个可能的原因是,复杂性和开销并不值得获益。字符串是A)一个更大的和B) 很多 比Integer
更常见的,{ {1}}等等,因为大多数人只要能够使用原语,只能使用他们无法避免的包装。
答案 1 :(得分:1)
IMO,String是java中最常用的类型。作为加载类的参数,连接到DB /网络连接的参数,(几乎)存储每个东西 - 列表很长。在任何应用程序中,与String相比,其他原语/包装类型组合在一起的使用场景也可以忽略不计。
如果以未经优化的方式使用(例如,在没有Stringpool的情况下实现),性能将会有所提升 - 因此拥有一个(仅)字符串池是有意义的。