String s = new String(“hello”);
Здесь будут созданы два объекта: один в динамической памяти, а другой - в пуле строк.
Итак, какова польза от метода intern()
? Строка "hello"
будет доступна в куче, а также в пуле строк после выполнения вышеуказанного оператора.
3 ответа
Прежде всего. String s = new String(“hello”);
создает ненужную строку, и ее не следует использовать. Затем вызов s = s.intern()
гарантирует, что будет возвращено «привет», добавленное в SCP, и, следовательно, вторая строка, созданная в куче, будет иметь право на сборку мусора.
intern()
добавляет строку в SCP, если она еще не присутствует. Обычно он используется, когда вы знаете, что String используется несколько раз, но не можете создать его с помощью literal . Поэтому вместо того, чтобы создавать тысячи строк с одним и тем же значением, вы (которые существуют одновременно), вы можете использовать intern
и убедиться, что только одна строка помещается в SCP и используется в 1000 местах (и все другие строки с то же значение в куче имеют право на сборщик мусора)
Объект создается в пуле строковых констант, если что-либо написано в двойных кавычках и если оно еще не существует в пуле строковых констант.
Что касается метода intern()
, он возвращает каноническое представление строки. Для дальнейшего понимания см.
http://www.javatpoint.com/java-string-intern
какова польза от метода intern ()
Строки intern
упрощают сравнение строк с помощью ==
(быстрее) вместо функции equals
, где не-стажер не может использовать оператор ==
для проверки равенства.
String s = new String(“hello”);
Строки new
упрощают сравнение строк с помощью s
(быстрее) вместо функции {{X2}}, где не-стажер не может использовать оператор {{X3}} для проверки равенства.…
Вызов intern()
строкового литерала s
добавит слабую ссылку (кратковременную) на s
в SCP, а также вернет эту ссылку, поэтому GC
обязательно освободит потребляемую память кучи автор: s
.
Слабая ссылка также будет удалена, когда она больше не будет использоваться, что снова приводит к эффективному управлению памятью.
Когда именно объект создается в пуле строковых констант
Строка будет добавлена к SCP временно, либо с синтаксисом direct double quotes
(String s = "sytax";), либо с вызовом intern()
.
когда мы используем новый оператор?
Избегайте этого как можно чаще со струнами или никогда.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.