Пул строк
public static void main(String[] args) { String str1 = "Test"; String str2 = "Test"; System.out.println(str1 == str2); //На консоль будет выведено:: true }
ℹ️В коде, приведенном выше, по идее, создается два объекта типа String. Каждый из двух объектов типа String содержит значение "Test".
ℹ️Казалось бы, если создается два объекта, то они должны храниться в разных ячейках памяти и операция “==” (сравнивает адреса объектов в памяти) должна была бы вернуть “false”, так как ячейки памяти должны быть разные. Но операция “==” возвращает “true”.
ℹ️Операция “==” возвращает “true”, так как в Java есть пул строк.
ℹ️Как работает пул строк ?
- При создании объекта типа String, jvm проверяет, нет ли в пуле строк уже строки с текстом "Test" ? Если нет, то создается новая строка и помещается в пул строк.
- Если строка есть в пуле, то вместо создания нового объекта, из пула берется ссылка на этот существующий объект с текстом "Test".
ℹ️Поэтому, в строке String str2 = "Test" не создается новый объект, а из пула берется ссылка на существующий объект и присваиваться переменной str2,поэтому операция “==” (сравнивает адреса объектов в памяти) возвращает “true”.