Мой вопрос о java interning и постоянных пулах.
Java поддерживает пул констант для java.lang.String
, умеет использовать JVM-память, и для этого java.lang.String становится неизменным. Итак, почему Java не поддерживает постоянные пулы других неизменяемых типов, таких как Long, Integer, Char, Short?. Не может ли это также сохранить память?
Мне известно, что целые числа объединены в диапазон значений [-127, 127], хотя я не понимаю причины выбора этого диапазона.
Вот тестовый код, который я написал для тестирования пула других неизменяемых типов данных.
public class PoolTest {
public static void main(String... args) {
// Pooling of Integer [-127, 127]
Integer x = 127, y = 127;
System.out.println("Integer:" + (x == y)); // prints true
x = 129;
y = 129;
System.out.println("Integer:" + (x == y)); // prints false
// Apparent pooling of short [-127, 127]
Short i = 127, j = 127;
System.out.println("Short: " + (i == j)); // prints true
i = 128;
j = 128;
System.out.println("Short: " + (i == j)); // prints false
// No pooling of long values
Long k = 10L, l = 10L;
System.out.println("Long: " + (i == j)); // prints false
k = 128L;
l = 128L;
System.out.println("Long: " + (i == j)); // prints false
}
}