Пул строк и пул чисел?
Пул - место в памяти программы (куче), отведённое для хранения строковых (пул строк) или числовых (пул чисел) значений.
Сначала о пуле строк
Туда попадают все строки, присвоенные переменным через обычные кавычки.
String str1 = "hello"; String str2 = "hello"; String str3 = "bye";
На данном моменте пул будет содержать следующее:
["hello"] ["bye"]
Да, str1 и str2 указывают на один объект, поэтому при сравнивании через "==" будут равны. Удивительно. Две одинаковые строки равны друг другу. Вау.
Но при создании строки через ключевое слово new она не попадёт в пул, а значит, при сравнении с такими же строками в пуле, результат будет отрицательным.
String str4 = new String("hello"); //сравнивая с str1 или str2 через "==" будет false
Значение, созданное через new String, можно переместить в пул с помощью метода intern()
String str4interned = str4.intern(); //str4interned == str1 будет true
Теперь о пуле чисел
Всё то же самое, но пул чисел (а именно пул Integer) хранит значения от -128 до 127.
Пример:
Integer int1 = 127; Integer int2 = 127;
int1 == int2 даёт true
Integer int3 = 128; Integer int4 = 128;
int3 == int4 даёт false, потому что эти значения пусть и одинаковые, но уже не в одном пуле.
Ну, надеюсь, понятно.












