为什么包装类没有像字符串池一样的池呢?

3

整数、字符、双精度等-所有这些都像字符串一样是不可变的类。字符串有Stringpool来节省内存,但为什么这些包装类没有类似的池呢?

我已经检查过:Integer只有类似的池,但只能到127,而不能超过它。


2
因为在大多数应用程序中,String 使用的内存远远超过其他类型。为了减少包装类的内存使用量,您可以直接使用基本数据类型。 - Boris the Spider
Character类保存了与标准ASCII字符集相关的所有值; ByteShortInteger,正如你所提到的,保存从-128到+127的值。 - Mark
2个回答

5
除非有人可以找到来自Gosling等人的1994年左右的设计文档,具体讨论这个问题,否则无法确定。
一个可能的原因是复杂性和开销被认为不值得收益。字符串 A) 比整数、长整数等要大得多,B) 比它们更常见,因为大多数人会尽可能使用基本数据类型,只在不能避免时使用包装器。

1

在Java中,String是最常用的类型。它可以作为加载类的参数、连接到数据库/网络连接的参数以及存储(几乎)所有事物的参数 - 列表很长。与其他基本类型/包装器类型组合使用的情况相比,它们的使用场景也几乎可以忽略不计 - 在任何应用程序中。

如果以未经优化的方式使用(例如没有实现String池),性能会受到影响 - 因此,拥有(仅)String池是有意义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接