эквивалент + в StringBuffer - PullRequest
       1

эквивалент + в StringBuffer

0 голосов
/ 12 сентября 2011

Я использовал String для следующих действий.

String x = "a";
String y = "b";
String z = y+""+x;
x = y;
y = z;

Итак, окончательные значения x и y равны b и ba. Я пытался использовать StringBuffer.

StringBuffer x = new StringBuffer("a");
StringBuffer y = new StringBuffer("b");
StringBuffer z = new StringBuffer();
z = y+""+x;   //??? 

API предоставляет функцию добавления, но не выполняет то, что делает конкатенация. Есть ли эквивалент для объединения в классе StringBuffer?

Ответы [ 8 ]

6 голосов
/ 12 сентября 2011

Не используйте StringBuffer, если нет необходимости. Java 5.0 и более поздние версии по умолчанию используют StringBuilder

Начиная с выпуска JDK 5, этот класс был дополнен эквивалентным классом, предназначенным для использования одним потоком, StringBuilder. Класс StringBuilder, как правило, следует использовать предпочтительнее этого, поскольку он поддерживает все те же операции, но он быстрее, так как он не выполняет синхронизацию.

StringBuilder x = new StringBuilder("a");
StringBuilder y = new StringBuilder("b");
StringBuilder z = new StringBuilder().append(x).append(y);
4 голосов
/ 12 сентября 2011

Метод, который вы хотите добавить: z = x.append(" ").append(y);

Как видите, дополнения могут быть каскадными для создания хорошего потока кода.

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

2 голосов
/ 12 сентября 2011

Вы можете использовать StringBuffer.append(StringBuffer):

z.append(y).append(x);
1 голос
/ 12 сентября 2011

нет там нет; Оператор +, используемый в String, является особым случаем для объектов в Java. Только String может использовать это. Чтобы сделать конкатенацию в StringBuffer, его более обходной. Вы должны будете использовать append() (или, не дай бог, преобразовать их в String, использовать +, а затем преобразовать результат обратно в StringBuffer).

С помощью StringBuffer вы можете добавить еще StringBuffer. то есть:

 stringBuffer1.append(stringBuffer2)
1 голос
/ 12 сентября 2011

StringBuffer изначально не поддерживает +, как String. Вы должны использовать append методы.

1 голос
/ 12 сентября 2011
String z = y.toString() + x.toString();

или

StringBuilder z = new StringBuilder();
z.append(y).append(x);

Примечания:

  1. + "" + лишний, поэтому я его удалил.
  2. Если вы не собираетесь совместно использовать строковый буфер между потоками, вы должны использовать StringBuilder вместо StringBuffer.
0 голосов
/ 12 сентября 2011

Предполагая, что вы хотите:

  • х имеет значение "а"
  • у имеет значение "b"
  • z имеет значение "ab"

Тогда нет, StringBuffer / Builder этого не сделает.

0 голосов
/ 12 сентября 2011

AHHH

Строки являются неизменяемыми, поэтому каждый раз, когда вы делаете z + x, вы фактически создаете экземпляр целого нового объекта, содержащего конкатенацию первых двух.

StringBuffers являются изменяемыми, что означает, что они могут быть изменены без создания новых экземпляров. Это позволяет создать один строковый буфер и добавить к нему дополнительные строковые значения при необходимости.

StringBuffer a = new StringBuffer("a");
a.append("b").append("c");
a.append("d");

приведет к "abcd" при вызове a.toString ().

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