String s = new String(“hello”); 

Здесь будут созданы два объекта: один в динамической памяти, а другой - в пуле строк.

Итак, какова польза от метода intern()? Строка "hello" будет доступна в куче, а также в пуле строк после выполнения вышеуказанного оператора.

3
deepak 8 Сен 2016 в 13:10

3 ответа

Лучший ответ

Прежде всего. String s = new String(“hello”); создает ненужную строку, и ее не следует использовать. Затем вызов s = s.intern() гарантирует, что будет возвращено «привет», добавленное в SCP, и, следовательно, вторая строка, созданная в куче, будет иметь право на сборку мусора.

intern() добавляет строку в SCP, если она еще не присутствует. Обычно он используется, когда вы знаете, что String используется несколько раз, но не можете создать его с помощью literal . Поэтому вместо того, чтобы создавать тысячи строк с одним и тем же значением, вы (которые существуют одновременно), вы можете использовать intern и убедиться, что только одна строка помещается в SCP и используется в 1000 местах (и все другие строки с то же значение в куче имеют право на сборщик мусора)

4
TheLostMind 8 Сен 2016 в 10:17

Объект создается в пуле строковых констант, если что-либо написано в двойных кавычках и если оно еще не существует в пуле строковых констант.
Что касается метода intern(), он возвращает каноническое представление строки. Для дальнейшего понимания см.
http://www.javatpoint.com/java-string-intern

0
Gaur93 8 Сен 2016 в 10:54

какова польза от метода 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().

когда мы используем новый оператор?

Избегайте этого как можно чаще со струнами или никогда.

0
Pavneet_Singh 8 Сен 2016 в 11:03