当我们在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?
答案 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()
方法一起使用。