В чем разница между String и StringBuffer в Java? - PullRequest
63 голосов
/ 13 марта 2010

В чем разница между String и StringBuffer в Java?

Есть ли максимальный размер для строки?

Ответы [ 15 ]

1 голос
/ 25 июля 2013
String is immutable. 

Почему? Отметьте здесь .

StringBuffer is not. It is thread safe. 

Дополнительные вопросы, например, когда использовать какие и другие концепции, могут быть выяснены после this .

Надеюсь, это поможет.

1 голос
/ 04 марта 2011

Строка является неизменной, это означает, что когда вы выполняете операцию над строкой, вы действительно создаете совершенно новую строку.

StringBuffer является изменяемым, и вы можете добавить к нему, а также сбросить его длину до 0.

На практике компилятор, похоже, использует StringBuffer во время конкатенации строк по соображениям производительности .

1 голос
/ 13 марта 2010

A StringBuffer или его младший и более быстрый брат StringBuilder предпочтительнее, когда вы собираетесь выполнять множество конкатенаций строк с ароматом

string += newString;

или эквивалентно

string = string + newString;

, потому что вышеупомянутые конструкции неявно создают новую строку каждый раз, что будет огромной производительностью и падением. StringBuffer / StringBuilder находится под капотом, лучше всего его сравнивать с динамически расширяемым List<Character>.

1 голос
/ 13 марта 2010

A String - это неизменяемый массив символов.

A StringBuffer - это изменяемый массив символов. Часто преобразуется в String, когда завершает мутирование.

Поскольку оба являются массивом, максимальный размер для обоих равен максимальному размеру целого числа, равному 2 ^ 31-1 (см. JavaDoc , также проверьте JavaDoc для обоих String и StringBuffer). Это потому, что аргумент .length массива является примитивом int. (См. Массивы ).

0 голосов
/ 11 июня 2016

Производительность с точки зрения производительности StringBuffer намного лучше, чем String; потому что всякий раз, когда вы применяете конкатенацию к объекту String, новый объект String создается при каждой конкатенации.

Основное правило: Строка является неизменяемой (неизменяемой), а StringBuffer - изменяемой (изменяемой)

Вот программный эксперимент, в котором вы получите разницу в производительности

public class Test {

  public static int LOOP_ITERATION= 100000;

  public static void stringTest(){
    long startTime = System.currentTimeMillis();
    String string = "This";
    for(int i=0;i<LOOP_ITERATION;i++){
        string = string+"Yasir";
    }

    long endTime = System.currentTimeMillis();
    System.out.println(endTime - startTime);    
  }

  public static void stringBufferTest(){
    long startTime = System.currentTimeMillis();
    StringBuffer stringBuffer = new StringBuffer("This");
    for(int i=0;i<LOOP_ITERATION;i++){
        stringBuffer.append("Yasir");
    }

    long endTime = System.currentTimeMillis();
    System.out.println(endTime - startTime);
  }

  public static void main(String []args){
    stringTest()
    stringBufferTest(); 
  }
 }

Вывод строки в моей машине 14800

Вывод StringBuffer в моей машине 14

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