Пул строковых констант: углубленное исследование
Строковые литералы в Java объединяются для оптимизации использования памяти и повышения производительности. Это означает, что при обнаружении строкового литерала компилятор проверяет пул строковых констант на наличие существующего объекта String с тем же значением. Если он найден, ссылка направляется на существующий объект, избегая создания нового.
Однако путаница возникает при использовании оператора «новый» для создания нового объекта String, поскольку это, по-видимому, противоречит правилу. стажировки. Чтобы прояснить это, давайте рассмотрим следующие утверждения:
Эти операторы указывают, что, хотя строковый литерал интернируется и сохраняется в пуле, использование «нового» заставляет JVM создать новый объект String. Это означает, что, несмотря на существование эквивалентной строки в пуле, оператор «new» обходит его и выделяет новый объект в памяти, отличной от пула.
Чтобы проиллюстрировать это, рассмотрим следующий пример:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
Как и ожидалось, значения «one» и «two» — «test», но сравнение «==" возвращает false, поскольку они относятся к разным объектам String. Это связано с тем, что использование «new» приводит к созданию нового объекта String для «one», даже если строковый литерал «test» уже существует в пуле.
Подводя итог, можно сказать, что пул строковых констант оптимизирует использование памяти путем интернирования строковых литералов. Однако использование «new» обходит пул и создает новый объект String в памяти, не относящейся к пулу. В результате образуются два разных объекта String с одинаковым значением, но разными ссылками.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3