Лучшая практика Java String в отношении пула - PullRequest
1 голос
/ 20 сентября 2010

Меня всегда интересовало, как наиболее эффективно создать String в Java.Под этим я подразумеваю строки, значения которых не меняются.

Пример:

String prefix = "Hi, I am ";

Значение prefix не изменится, но постфикс может быть.

  • Я не хочу делать переменную prefix a static final, поскольку она всегда будет оставаться активной в JVM, даже если класс используется редко ... бла бла.

  • и когда я делаю следующее:

    String fullWord = ("Hi, I am "+_postFix);

    Я предполагаю, что значение "Hi, I am" String останется в пуле Java String, и у меня нет«накладные расходы» объявления префикса как переменной.

То есть мой вопрос сводится к следующему:

  1. Будет ли пул Java String всегдаиспользоваться, когда и когда я не объявляю строковую переменную с помощью ключевого слова new?

  2. Лучше ли объявлять строковую переменную перед ее использованием?

  3. Как работает пул строк?Обнаруживает ли JVM, что часто используется одно и то же строковое значение, и продолжает ссылаться на эту строку в памяти JVM?

1 Ответ

10 голосов
/ 20 сентября 2010
  1. Все литералы String интернированы.
  2. Пишите код, который легко понять.На самом деле не стоит пытаться нано-оптимизировать это.
  3. Все литералы String, загруженные загрузчиками классов, интернированы, как и String s, возвращаемые String.intern (что является медленным способом выполненияэто, в типичных реализациях).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...