Люди, вы забыли, что процесс размещения буквенных строк в пуле называется "интернированием". Класс String имеет метод с именем intern (). Этот метод помещает любую строку в пул, даже если она изначально не находится в пуле (не буквально). Это означает, что код такой:
String a = "hello";
String b = new String("hello");
b = b.intern();
System.out.println(a == b);
напечатает "true
".
Теперь, зачем кому-то это нужно? Как вы можете себе представить, сравнение строк a.equals(b)
может занять много времени, если строки имеют одинаковую длину, но разные в конце.
(Просто посмотрите на исходный код .equals ().).
Однако непосредственное сравнение ссылок - это то же самое, что сравнение целых чисел (говорят указатели на C), что почти мгновенно.
Итак, что это дает вам? Скорость. Если вам придется сравнивать одни и те же строки много-много раз, производительность вашей программы значительно улучшится, если вы интернируете эти строки . Однако, если вы собираетесь сравнивать строки только один раз, прирост производительности не будет, поскольку сам процесс интернирования использует equals ().
Надеюсь, это объясняет это.
спасибо