Разница между String и StringBuffer / StringBuilder в Java

Здесь String неизменен, означает, что вы не можете изменить сам объект, но вы можете изменить ссылку на объект, тогда как StringBuffer и StringBuilder являются изменяемыми, поэтому они могут изменять свои значения.

 
String str=null;
for(int i=0;i < =500;i++){
    str+="Add this";
}

Вышеупомянутый сегмент кода создает 500 новых строковых переменных. Оператор «+» перегружен для String и используется для конкатенирования двух строк. Внутренняя операция «+» выполняется с использованием либо StringBuffer, либо StringBuilder. В таких ситуациях вы должны использовать класс Java StringBuffer / StringBuilder.

Пример

 
public class TestClass{
  public static void main(String[] args) {
    StringBuilder sBuilder = new StringBuilder();
    for (int i = 0; i < 500; i++)
    {
      sBuilder.append("Add This");
    }
    String str = sBuilder.toString();
  }
}
открытый класс TestClass {
   public static void main (String [] args) {
     StringBuilder sBuilder = new StringBuilder();
     for (int i = 0; i <500; i ++)
     {
       sBuilder.append («Добавить это»);
     }
     String str = sBuilder.toString();
   }
}

...

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

Разница в потоке безопасности

StringBuffer синхронизирован, т. Е. Поточный поток StringBuffer. Это означает, что два потока не могут одновременно вызвать методы StringBuffer. Пока StringBuilder не синхронизирован, то есть не потокобезопасен. Это означает, что два потока могут одновременно вызвать методы StringBuilder. Итак, если вы не собираетесь использовать потоки, используйте класс StringBuilder, поскольку он будет более эффективен, чем StringBuffer из-за отсутствия синхронизации. Методы StingBuilder не синхронизированы, но по сравнению с другими строками, Stringbuilder работает быстрее всего.

Почему у нас есть два класса для одной цели?

 

StringBuffer - это Thread safe, а StringBuilder - нет. StringBuilder - это новый класс в StringBuffer Api, и он был представлен в JDK 5 и всегда рекомендуется, если вы работаете в среде с одним потоком, поскольку он намного быстрее.

Источник: http://net-informations.com/Java/cJava/builder.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector