вторник, 8 ноября 2011 г.

String, StringBuilder и StringBuffer: что использовать?

Самое важное отличие String от StringBuilder/StringBuffer - это то, что String immutable, в то время как StringBuilder/StringBuffer mutable.
Что же это значит? А значит это то, что значение String не может изменяться. Но вы ведь много раз так делали, скажите вы. Всё дело в том, что при изменении значения String в действительности создается новый объект с новым значением. И, конечно же, создание новых объектов при каждом изменении - операция неэффективная.
В действительности, такой код:
String s = "a";
s += "b";
равносилен этому коду:
String s = "a";
s = new StringBuilder(s).append("b").toString();
А вот StringBuilder/StringBuffer являются mutable. У них нет такой проблемы. Но в чем же между ними разница? Разница в том, что StringBuffer синхронизирован, а StringBuilder - нет. Так что в однопоточном приложении лучше использовать класс StringBuilder - он быстрей.
Итак, подводя итог, критерии выбора между этими классами:
String: если значение не изменяется.
StringBuilder: если значение изменяется, и доступ к строке имеет только один поток (класс был введен в Java 1.5)
StringBuffer: если значение изменяется и требуется мультипоточность.
На этом всё!

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.