Автор оригинала: Pankaj Kumar.
Объединение строк – очень распространенная операция в программировании. В этом уроке мы изучим различные способы объединения строк в Java.
Объединение строк в Java
Мы должны избегать использования оператора “+” для объединения строк. Мы должны использовать StringBuffer или StringBuilder для объединения строк.
Объединение строк с помощью оператора +
String внутренне использует StringBuffer (до Java 1.4) или StringBuilder (Java 1.5 и далее) для вызовов операторов строки”+”.
Давайте напишем простую java-программу для объединения строк, чтобы доказать это.
package com.journaldev.string.concatenation; public class StringConcatenationExample { public static void main(String args[]){ String str = new String ("Journal "); str += "Dev!!"; } }
Теперь мы отредактируем ту же программу, чтобы использовать StringBuffer.
package com.journaldev.string.concatenation; public class StringConcatenationExample { public static void main(String args[]){ StringBuffer str = new StringBuffer ("Journalbytecode"); str.append("Dev!!"); } }
Я оставил в стороне байт-код для обеих этих программ, так как вы можете видеть, что единственная разница между обеими этими программами находится в строках № 6 и 7. Давайте теперь проверим байт-код.
Байтовый код Объединения Строк
˛∫æ2.com/journaldev/string/concatenation/StringConcatenationExamplejava/lang/Object()VCode LineNumberTableLocalVariableTablethisLcom/journaldev/string/concatenation/StringConcatenationExample;main([Ljava/lang/String;)Vjava/lang/String Journal (Ljava/lang/String;)Vjava/lang/StringBuilder valueOf&(Ljava/lang/Object;)Ljava/lang/String; Dev!! !"#append-(Ljava/lang/String;)Ljava/lang/StringBuilder; %&'toString()Ljava/lang/String;args[Ljava/lang/String;strLjava/lang/String; SourceFileTTT.java!/*∑± [ªY∑LªY+∏∑∂ ∂$L± () *+,-
Строковый буферизатор добавляет байтовый код
˛∫æ2#com/journaldev/string/concatenation/StringConcatenationExamplejava/lang/Object()VCode LineNumberTableLocalVariableTablethisLcom/journaldev/string/concatenation/StringConcatenationExample;main([Ljava/lang/String;)Vjava/lang/StringBufferJournal (Ljava/lang/String;)VDev!! append,(Ljava/lang/String;)Ljava/lang/StringBuffer;args[Ljava/lang/String;strLjava/lang/StringBuffer; SourceFileTTT.java!/*∑± NªY∑L+∂W± !"
Из байтового кода ясно, что String + использует метод добавления StringBuilder для объединения строк.
Вот шаги, связанные с объединением строк с помощью оператора+.
- Создается новый объект StringBuilder.
- Строка “Журнал” копируется во вновь созданный объект StringBuilder.
- Метод StringBuilder append() вызывается для добавления “Dev !!” к объекту StringBuilder.
- Метод StringBuilder toString() вызывается для получения строкового объекта.
- Новая ссылка на строковый объект присваивается str и возвращается. Более старая строка “Журнал” теперь доступна для сбора мусора.
Метод StringBuilder и StringBuffer append()
Для объединения нескольких строк лучше использовать метод StringBuilder и StringBuffer append (). Эти служебные классы предоставляются для того, чтобы помочь вам в обычных строковых операциях.
- Создается новый объект StringBuffer со значением “Журнал “
- Метод append() вызывается для добавления “Dev !!” к объекту.
- Метод StringBuffer toString() вызывается для получения строкового объекта.
Вывод
Если вам нужно объединить несколько строк, можно использовать оператор+, потому что не будет никакой видимой задержки производительности. Но, если вы объединяете много строк, используйте метод StringBuilder append (). Если вы находитесь в многопоточной среде, используйте класс StringBuffer.
Ссылка: Документы String API