Класс String String Buffer, разница в классе String Builder - PullRequest
2 голосов
/ 11 октября 2010
StringBuffer sb=new StringBuffer("Hello");
sb.append("welcome");//working
sb.concat("hi");//not working 

Почему я не могу использовать concat здесь ??

Ответы [ 6 ]

6 голосов
/ 11 октября 2010

Поскольку в StringBuffer нет метода с именем concat. Эквивалентным является метод append.

Вы можете подумать, что термины метода concat в String.Both отличаются. В String метод concat возвращает новыйString каждый раз, поскольку String является неизменным, но в случае StringBuffer один и тот же объект изменяется. Поэтому, когда вам нужно добавить большое количество данных, всегда используйте StringBuffer или StringBulider (если вы не используете потоки), что даст вам большую производительность.*

Код строки:

 String str="hello";
 String strCon=str.concat("world");//return's new concatenated string,str not changed

Код StringBuffer / Builer:

StringBuffer strBuff=new StringBuffer("hello");
strBuff.append("world");//strBuff changed 
5 голосов
/ 11 октября 2010

Почему существуют эти 3 класса?

Во-первых, класс String является неизменным: если вы вызываете метод объекта String, который что-то в нем изменяет, вы получите новую строку в результате.

Но в некоторых случаях это не то, что Вы могли бы хотеть, может быть, потому что Вы обрабатываете много строк и не хотите создавать новый объект каждый раз, когда Вы что-то меняете.По этой причине был добавлен StringBuffer.

StringBuffer был также разработан для поточной защиты.Это означает, что вы получаете немного дополнительных затрат на большинство методов.Поэтому, если вашей программе требуется много операций с String (например, jgrep), это может стать узким местом.

Наконец, был добавлен StringBuilder.Это в основном StringBuffer без синхронизации.

А как насчет этого странного именования?По иронии судьбы, чтобы избежать путаницы ... Поскольку concat уже находится в String, но возвращает новый объект, лучше всего добавить другой метод.

1 голос
/ 11 октября 2010

StringBuffer или StringBuilder не являются String, java.lang.String имеет метод concat (String). StringBuffer является потокобезопасным, StringBuilder - нет.

0 голосов
/ 20 декабря 2013

Append (), insert (), reverse (), replace (), емкость (), sureCapacity (); методы, присутствующие в StringBuffer.java; Нет такого метода, как "concat ()"

0 голосов
/ 02 декабря 2013

String Buffer является потокобезопасным, и его методы синхронизированы.Методы imp буфера String:

append (), length (), insert ().

метод append в нем добавляет строку с существующей строкой для получения требуемой.*

0 голосов
/ 11 октября 2010

Поскольку нет метода concat для StringBuffer или StringBuilder:
http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...