为什么没有类似于String池的整数池?

时间:2014-03-20 08:21:12

标签: java string integer pool

当我们在JAVA中创建String时。

String s = new String("hello"); 

这个s对象是在堆中创建的。而

String s = "hello";

存储在String pool

类似于Integer类,

Integer i = new Integer(10); // Created in Heap.

Integer  ii = 10;  // Where is this created? Why I have never heard of Integer pool?

2 个答案:

答案 0 :(得分:0)

因为flyweight设计模式对整数没有意义 - 它们通常不用作常量,而是用作可变值。

有一些预定义的Integer值有意义:如ZERO或ONE。如果将Integer用作常量,则将{{1}}放入池中。

编辑:刚才意识到Why does the behavior of the Integer constant pool change at 127?中的答案更好。

答案 1 :(得分:0)

关于整数:

最好总是使用

Integer i = Integer.valueOf(42)

有关原因的解释可以在Javadoc comment中找到此方法:

  

此方法将始终缓存-128到127(包括端点)范围内的值,并可以缓存此范围之外的其他值。

关于字符串:

字符串不仅被程序员(例如你)使用。它们也被JVM本身大量使用。所有声明都是简单的字符串。编译后的字节码充满了它们。字符串池可以被视为JVM的所有字符串的chache机制。

程序员也可以将此字符串池与String.intern()方法一起使用。