класс StringBuffer и StringBuilder

137
30 марта 2018, 12:36

В чем разница между классами StringBuffer и StringBuilder в языке Java?

Answer 1

StringBuffer давно устарел и не рекомендуется к применению. О чём можно найти упоминания в "Effective Java" Джошуа Блоха, "Java Concurrency in Practice" Брайана Гетца и многих других учебниках. Его основное отличие от StringBuilder в том, что вызов метода append синхронизирован. В однопоточной среде это приводит к бесполезному замедлению программы. А в многопоточной бесполезно, так как смысл имеет только совместная синхронизация всех вызовов append, а не каждого по отдельности.

Answer 2

Эти классы похожи, практически двойники, они имеют одинаковые конструкторы, одни и те же методы, которые одинаково используются. Единственное их различие состоит в том, что класс StringBuffer синхронизированный и потокобезопасный. То есть класс StringBuffer удобнее использовать в многопоточных приложениях, где объект данного класса может меняться в различных потоках. Если же речь о многопоточных приложениях не идет, то лучше использовать класс StringBuilder, который не потокобезопасный, но при этом работает быстрее, чем StringBuffer в однопоточных приложениях.

Answer 3

StringBuffer синхронизирован, а StringBuilder - нет.

Соответственно StringBuilder работает быстрее и его следует применять там, где синхронизация (synchronized) не нужна.

READ ALSO
Где использовать volataile

Где использовать volataile

Модификатор volatile гарантирует видимость операций с полем и сохранение их последовательностиВолатильную переменную можно, например, использовать...

175
CompletableFuture использует Supplier вместо Callable?

CompletableFuture использует Supplier вместо Callable?

Почему completableFuture использует вместо привычного callable supplier, зачем так путать людей привыкших к старому доброму callable?

183
Java sqlite jdbc и другое

Java sqlite jdbc и другое

Собрал в jar проект, который работает с файлами sqlite (выполняется просто запрос "select id from user")На компьютере, где все собирал, все прекрасно работает

127
Чтение массива чисел

Чтение массива чисел

Есть InputStream в котором записана последовательность известной длины 32 битных чисел в LittleEndian порядке байт

152