Стоимость поиска интернирования строки и объявления буквальных строк

Два вопроса.

  1. Когда мы объявляем буквальные строки, мы ищем, есть ли такая же строка в пуле строк кучи. Это тоже интернирование (метод стажировки класса String )?

  2. На мой взгляд, каждое объявление литеральной строки требует бинарного поиска или чего-то подобного, поэтому оно стоит не менее log (n ) , когда n - количество существующих строк в пуле. А если в пуле много струн, это может стоить дорого. (возможно, компромисс между стоимостью поиска и памятью?) С этой точки зрения может быть опасно объявлять буквальные строки mant. Насколько велика эта стоимость поиска и почему java спроектирована таким образом (пул поиска при объявлении буквальных строк).

Ниже приводится то, что я упомянул, чтобы понять предысторию.


JavaDoc для java.lang.String класс утверждает:

Строки постоянны; их значения не могут быть изменены после создания. Буферы строк поддерживают изменяемые строки. Поскольку объекты String неизменяемы, они могут использоваться совместно.

http://www.janeg.ca/scjp/lang/strLiteral.html комментарии:

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

6
задан tshepang 8 May 2014 в 18:45
поделиться