Что же это значит? А значит это то, что значение 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: если значение изменяется и требуется мультипоточность.
На этом всё!
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.