Ключевая разница - String, StringBuffer и StringBuilder в Java
String, StringBuffer и String Builder - это классы в Java. Строка широко используется в программировании на Java. После создания объекта String их невозможно изменить. Каждый раз, когда в строке происходит изменение, создается новая строка. Даже если это конкатенация существующей строки, она создает новую строку. Это приводит к потере памяти. Классы StringBuffer и StringBuilder в Java используются для модификации String. Ключевое различие между String, StringBuffer и StringBuilder в Java заключается в том, что String - это класс для создания объекта типа String, представляющего собой последовательность символов, StringBuffer - это класс, используемый для изменения строк, который обеспечивает безопасность потоков, а StringBuilder - это класс, который используется для изменения строк, не обеспечивающих потокобезопасность.
Что такое String в Java?
Класс String находится в пакете java.lang. Каждый раз, когда программист создает String, это объект типа String. Строки являются неизменяемыми, что означает, что после создания объекта его нельзя изменить. Объекты, созданные с использованием классов-оболочек, таких как Integer, Byte, Float, Double, также являются неизменяемыми. Строковый литерал заключается в двойные кавычки. например "Привет, мир". Каждый раз, когда создается строковый литерал, виртуальная машина Java (JVM) проверяет пул констант String. Если String существует, возвращается ссылка на пул констант String. Если это новая строка, этот объект создается в пуле констант строк.
Рисунок 01: Java-программа, использующая String, StringBuffer и StringBuilder
См. фрагмент кода ниже.
String s1=«Привет»;
s1=s1 + «Мир»;
System.out.println(s1);
В первом операторе s1 относится к «Hello» в пуле констант String. Во втором утверждении JVM не изменяет существующую строку. Вместо этого он создает новую строку как «Hello World», и теперь s1 ссылается на эту новую строку. Исходящий объект «Hello» все еще существует в пуле констант String.
Если есть такой код, String s1=«Привет»;
Строка s2=s1;
s1, s2 оба будут ссылаться на объект String «Hello».
Что такое StringBuffer в Java?
Класс StringBuffer используется для того, чтобы сделать объекты String изменяемыми. Следовательно, эти объекты могут быть изменены. StringBuffer определяет четыре конструктора. StringBuffer(), StringBuffer(int size), StringBuffer(String str), StringBuffer (charSequence ch)
См. код ниже, StringBuffer s1=новый StringBuffer("Привет");
s1.append("Мир");
System.out.println(s1);
В операторе 1 s1 относится к объекту «Hello» в куче. Объект является изменяемым, поскольку он создается с использованием StringBuffer. В операторе 2 «World» добавляется к тому же строковому объекту «Hello».
String объекты, созданные с помощью класса StringBuffer, могут экономить память. StringBuffer обеспечивает безопасность потоков, поскольку два потока не могут одновременно обращаться к одному и тому же методу в классе StringBuffer. Безопасность потоков снижает производительность StringBuffer. Класс StringBuffer содержит такие методы, как append(), insert(), reverse(), replace().
Что такое StringBuilder в Java?
Класс StringBuilder используется для того, чтобы сделать объекты String изменяемыми. Следовательно, эти объекты могут быть изменены. Функциональность аналогична StringBuffer, но это не обеспечивает потокобезопасности. StringBuilder имеет такие конструкторы, как StringBuilder(), StringBuilder(int size), StringBuilder(String str).
См. приведенный ниже код.
StringBuilder s1=новый StringBuilder("Привет");
s1.append("Мир");
System.out.println(s1);
В операторе 1 s1 относится к объекту «Hello» в куче. Объект является изменяемым, поскольку он создается с помощью StringBuilder. В операторе 2 «World» добавляется к тому же строковому объекту «Hello». Совершенно новый объект String не создается.
Строковые объекты, созданные с помощью класса StringBuilder, могут экономить память. В отличие от StringBuffer, StringBuilder не обеспечивает безопасность потоков, поскольку два потока могут одновременно обращаться к одному и тому же методу в классе StringBuilder. Класс StringBuilder содержит такие методы, как append(), insert(), reverse(), replace().
В чем сходство между String, StringBuffer и StringBuilder в Java?
Все можно использовать для создания строк
В чем разница между String StringBuffer и StringBuilder в Java?
String против StringBuffer против StringBuilder |
|
Строка | Строка - это класс Java, который используется для создания объекта типа String, представляющего собой последовательность символов. |
StringBuffer | StringBuffer - это класс Java, который используется для создания объектов String, которые можно изменять с помощью потоковой безопасности. |
StringBuilder | StringBuilder - это класс, который используется для создания строковых объектов, которые можно изменять без обеспечения безопасности потоков. |
Мутабельность | |
Строка | Строка является неизменяемым классом. |
StringBuffer | StringBuffer - изменяемый класс. |
StringBuilder | StringBuilder - это изменяемый класс. |
Thread Safety | |
Строка | Методы String являются потокобезопасными. |
StringBuffer | Методы StringBuffer потокобезопасны и синхронизированы. |
StringBuilder | Методы StringBuilder не являются потокобезопасными и не синхронизируются. |
Производительность | |
Строка | Строка быстрая. |
StringBuffer | StringBuffer работает медленно. |
StringBuilder | StringBuilder работает быстро. |
Резюме - String, StringBuffer и StringBuilder в Java
String, StringBuffer и StringBuilder кажутся одинаковыми, но имеют разные значения. Все это классы Java. Разница между String, StringBuffer и StringBuilder в Java заключается в том, что String - это класс для создания объекта типа String, представляющего собой набор символов, StringBuffer - это класс, который используется для изменения строк и обеспечения безопасности потоков, а StringBuilder - это класс, который используется для изменения строк, не обеспечивающих потокобезопасность.
Загрузить PDF String vs StringBuffer vs StringBuilder в Java
Вы можете загрузить PDF-версию этой статьи и использовать ее в автономном режиме в соответствии с примечанием к цитированию. Загрузите PDF-версию здесь. Разница между String StringBuffer и StringBuilder в Java