Почему метод 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 ()