Почему метод String intern?

Как объясняется в этом Когда мы должны использовать метод intern String для String констант, опубликуем, что литералы String автоматически объединены, но для объекта, построенного с использованием новых, нет, поэтому для этот интерпольный метод используется. Но даже если мы будем использовать метод intern, будет создан новый объект, то в чем заключается использование метода intern?

String s = "Example";

String s1 = new String("Example"); // will create new object

String s2 = new String("Example").intern(); // this will create new object
 // but as we are calling intern we will get reference of pooled string "Example"

now

System.out.println(s == s1); // will return false
System.out.println(s == s2); // will return true
System.out.println(s1 == s2); // will return false

Итак, какое использование метода intern?

Edit

Я понял работу метода intern, но мой вопрос , почему существует метод intern?, потому что для вызова метода intern мы должны создавать строковый объект с помощью new, который будет создавать новый экземпляр строки!

String s3 = new String("Example"); // again new object

String s4 = s3.intern();

System.out.println(s3 == s4); // will return false

Таким образом, вызов метода intern не будет указывать s3 на объединенную строку. intern метод вернет ссылку на объединенную строку.

Также вызов intern переместит строку в пул, если она еще не объединена? Значит ли это, что каждый раз, когда я вызываю intern на любой строке, вы будете пущены в пул?

Ответ 1

Основным алгоритмом для .intern() является следующее:

  • Создать хэш-набор строк
  • Проверьте, находится ли строка, с которой вы работаете, уже в наборе
  • Если да, верните одно из набора
  • В противном случае добавьте эту строку в набор и верните его

Поэтому он в основном используется для нахождения данной строки в пуле, если она существует, тогда она получит тот же экземпляр, что и в противном случае создает новый экземпляр для новой строки.

Ответ 2

Вот последовательность событий:

String s = "Example";

Создайте литерал Sting в пуле

String s1 = new String("Example");

// will create new object <-- Correct, just create a new object

String s2 = new String("Example").intern();//

Создайте объект только в том случае, если строковый литерал "Пример" не найден в пуле. В этом случае s1 будет перенастроен.

Надеюсь, вы увидите, что стажер фактически дает вам возможность использовать String из пула. И далее в Java все строки являются объектами; поэтому пул фактически является ссылкой на строку, имеющую точную последовательность char.

Я помню очень хороший поток для самого stackoverflow; просто нашел это для вас.. Просто проверьте это, это потрясающе Является ли String Literal Pool сборником ссылок на объект String или набор объектов

Ответ 3

Этот метод возвращает каноническое представление для строкового объекта. Из этого следует, что для любых двух строк a и t, s.intern()==t.intern() является true тогда и только тогда, когда s.equal (t) является true.

Вот ваш синтаксис: -

public String intern ()