Когда я объявляю, что String
выглядит так:
String a= "Hello, World!"
Я бы хотел спросить: String
делает из массива?
Кроме того, я понимаю, что StringBuffer
специально предназначен для редактирования текста. Если я использую String
текст не может быть изменен во время выполнения программы, это означает, что если я хочу изменить или работать с текстом, я должен использовать StringBuffer
.
Это правильные парни?
Зона хранения
1.1 String
- постоянный пул строк
1.2 StringBuffer
- куча
1.3 StringBuilder
- Куча
модифицируемый
2.1 String
- Нет (неизменяемая)
2.2 StringBuffer
- Да (изменяемый)
2.3 StringBuilder
- Да (измененный)
Потоковое Сейф
3.1 String
- Да
3.2 StringBuffer
- Да
3.3 StringBuilder
- нет
Представление
4.1 String
- быстро
4.2 StringBuffer
- очень медленно
4.3 StringBuilder
- быстрый
да. Если вы хотите сохранить строку, которая не изменится, вы можете использовать тип данных String. Если вам нужен тип данных, поддерживающий модификацию значений, StringBuilder или StringBuffer лучше, чем String.
Вы всегда можете изменить строку в java как:
String value = "hello";
value = value + " world";
System.out.println(value); // "hello world"
Но это вычислительно интенсивно, вместо этого вы должны использовать StringBuilder:
StringBuilder value = new StringBuilder("hello");
value.append(" world");
System.out.println(value.toString()); // "hello world"
эй, вы можете изменить значение строки
см. пример
String s="raju";
s=s+"ravi";
если мы напечатаем s
он распечатает
раджу рави.
но StringBuffer
для потокобезопасности, когда вы используете String
в многопоточной среде, рекомендуется использовать StringBuffer
.
Если вы хотите не сохранять неизменяемую, а не многопоточную среду и более высокую производительность, рекомендуется использовать StringBuilder
Строки неизменяемы в java, тогда как классы StringBuffer и StringBuilder используются, когда есть необходимость внести много изменений в строки символов.
В отличие от строк, объекты типа StringBuffer и Stringbuilder могут быть изменены снова и снова, не оставляя много новых неиспользуемых объектов.
Класс StringBuilder был представлен с Java 5, и основное отличие между StringBuffer и StringBuilder заключается в том, что методы StringBuilders не являются потокобезопасными (не синхронизированными).
Рекомендуется использовать StringBuilder по возможности, потому что он быстрее, чем StringBuffer. Однако, если необходима безопасность потока, лучшим вариантом являются объекты StringBuffer. пример
public class Test{
public static void main(String args[]){
StringBuffer sBuffer = new StringBuffer(" test");
sBuffer.append(" String Buffer");
System.ou.println(sBuffer);
}
}
вы можете также использовать delete(int start, int end), public insert(int offset, int i),replace(int start, int end, String str) functions with string builder and buffer class
подробнее см. ссылку
Вы можете использовать оба для работы с текстом, но главное отличие состоит в том, что при выполнении конкатенаций "StringBuffer" быстрее, чем "String".
Если многопользователи работают в String, лучше использовать StringBuffer
(Thread-safe)
Если только один пользователь будет редактировать, что String лучше использовать StringBuilder
(быстрее, лучше)
с другой стороны String
является неизменным, что означает, что если вы НЕ планируете редактировать свою строку, вам лучше перейти на объект Simple String
поскольку он будет быстрее через кеширование
Если у вас есть
String a="Hello";
и вы делаете a=a+"World";
, тогда первая строка "удаляется", и у вас есть новый строковый объект (объект, который ссылается на ссылку). С другой стороны, если у вас есть
StringBuffer a=new StringBuffer("Hello");
и вы write a.append("world");
, a остается неизменным (эта же ссылка, только состояние объекта было изменено, а не ссылка). Извините за мой английский..
public class Puzzle {
public static void main(String args[]) {
String a = new String("Hello");
String b = a;
System.out.println(a == b); //it s true
a = a + "world";
System.out.println(a == b); //it s false
StringBuffer c = new StringBuffer("Hello");
StringBuffer d = c;
System.out.println(c == d); //it s true
c.append("world");
System.out.println(c == d); //it s true
}
}
StringBuilder
лучше, чемStringBuffer