Я просмотрел скомпилированный код с помощью командной строки javac, и я видел, когда я использовал конкатенацию String с оператором +, скомпилированный код заменен на метод append() StringBuilder. теперь я думаю, что использование StringBuilder и String конкатенации имеют одинаковую производительность, потому что они имеют аналогичный байт-код, правильно ли это?java: String concat в байт-коде, преобразованный в StringBuilder
ответ
Да, это правда! Но когда вы конкатенируете в цикле, поведение отличается. например
String str = "Some string";
for (int i = 0; i < 10; i++) {
str += i;
}
новый StringBuilder
будут построены на каждой итерации цикла (с начальным значением ул) и в конце каждой итерации будет конкатенации с начальным String (фактически StringBuilder
с начальным значением str
).
Итак, вам нужно создать StringBuilder самостоятельно, только когда вы работаете с конкатенацией String в цикле.
Основное отличие (и причина, по которой компилятор использует StringBuilder
для конкатенации строк) состоит в том, что String
неизменен, тогда как StringBuilder
нет.
Например, для вычисления s1 + s2 + s3
, используя только строки, требуется копировать символы s1
дважды. Этого можно избежать (и) избежать, используя StringBuilder
.
Эта оптимизация явно разрешено JLS:
Реализация может выполнять преобразование и конкатенацию в один шаг, чтобы избежать создания и удаления промежуточного объекта String. Чтобы увеличить производительность повторной конкатенации строк, компилятор Java может использовать класс StringBuffer или подобный метод для уменьшения количества промежуточных объектов String, созданных при оценке выражения.
- 1. Java: String concat vs StringBuilder - оптимизирован, поэтому что мне делать?
- 2. Java String vs StringBuilder
- 3. Одд шаблона в Java байткоде
- 4. Преимущество String over StringBuilder в Java
- 5. JAVA String Обратное использование StringBuilder
- 6. Преобразование StringBuilder в RDD [String]
- 7. String.Format vs "string" + "string" или StringBuilder?
- 8. StringBuilder в Java
- 9. инициализация StringBuilder в Java
- 10. Строка равенство в ассемблерном байткоде
- 11. Java Static String или Static StringBuilder
- 12. Использование + в Concat строку в Java
- 13. concat string в скрипте оболочки
- 14. Concat String в цикле for
- 15. Кодировка StringBuilder в Java
- 16. В Java, когда я предпочитаю String over StringBuilder наоборот?
- 17. Java string/stringbuilder Вставить нуль в базу данных mysql
- 18. Как использовать StringBuilder для обработки String в этой программе Java?
- 19. преобразованный к типу в Java
- 20. Производительность StringBuilder Вставка против строки Concat
- 21. Stringbuilder java
- 22. Android string concat дает outofmemoryerror
- 23. Как использовать StringBuilder в Java
- 24. Как лучше всего преобразовать StringBuilder в String []?
- 25. Строка CONCAT не работает в Java
- 26. android concat string OutOfMemoryError
- 27. ForEach String concat
- 28. MySQL string и concat
- 29. String concat in C
- 30. TCL string concat