В Java, String, StringBuffer и StringBuilder часто используются классы строк в программировании. Разница между ними также является вопросом, который часто задают в интервью. Теперь суммируйте и посмотрите, как они разные и одинаковые.
1. Переменная и неизменная
String Class использует массив символов для сохранения строк, следующим образом: Поскольку существует «окончательный» модификатор, вы можете знать, что строковые объекты неизменны.
Частная конечная стоимость символа [];
Как StringBuilder, так и StringBuffer унаследованы от класса AbstractStringBuilder. В AbstractStringBuilder массивы персонажей используются для сохранения струн. Следующим образом видно, что оба объекта изменяются.
char [] значение;
2. Это многопоточное и безопасное?
Объекты в строке неизменны, поэтому их можно понимать как константы, которые, очевидно, являются защищенными потоком.
AbstractStringBuilder - это общественный родительский класс StringBuilder и StringBuffer, который определяет некоторые основные операции строк, такие как ExpandCape, добавление, вставка, индекс и другие публичные методы.
StringBuffer добавил блокировку синхронизации в метод или блокировку синхронизации к вызываемому методу, поэтому он безопасен для потока. См. Следующий исходный код:
public Synchronized StringBuffer reverse () {super.reverse (); вернуть это;} public int indexof (string str) {return indexof (str,); // Существует публичный синхронизированный метод int indexof (String Str, int fromindex)} StringBuilder не добавляет блокировки синхронизации в метод, поэтому он не является безопасным.
3. StringBuilder и StringBuffer в общем
StringBuilder и StringBuffer имеют публичные родительские классы AbstractStringBuilder (Abstract Class).
Одним из различий между абстрактными классами и интерфейсами является то, что некоторые публичные методы подклассов могут быть определены в абстрактных классах. Подклассы должны только добавлять новые функции и не нужно повторять существующие методы; В то время как интерфейсы определяют только методы и константы.
Методы StringBuilder и StringBuffer будут называть публичные методы в AbstractStringBuilder, таких как Super.Append (...). Просто StringBuffer добавит в метод синхронизированный ключевой слов и синхронизирует его.
Наконец, если программа не является многопоточной, то использование StringBuilder более эффективно, чем StringBuffer.
Краткое описание разницы между Stringbuffer StringBuilder в Java
* String Class является неизменным классом. Пока строка изменена, будут сгенерированы новые объекты.
* StringBuffer и StringBuilder являются изменчивыми классами, и никакие новые объекты не генерируются любыми изменениями в строках.
При использовании его на практике, если вам часто нужно изменять строку, например, вставку, удаление и т. Д.
* Но в чем разница между StringBuffer и StringBuilder?
StringBuffer безопасен для потока и очень удобен в использовании в многопоточных программах, но эффективность программы будет медленнее.
StringBuilder не безопасен для потока и более эффективен, чем StringBuffer в одном потоке.
* В общем, время работы трех:
String> StringBuffer> StringBuilder