1 строка
Строка: строка постоянная, длина строки неизменна.
2 StringBuffer
StringBuffer: String Variable (синхронизированная, то есть поток-безопасная). Если вы хотите часто изменить содержимое строки, лучше всего использовать StringBuffer по соображениям эффективности. Если вы хотите преобразовать в тип строки, вы можете вызвать метод StringBuffer's ToString ().
Java.lang.stringbuffer Thread-Safe Mintable символа. Он содержит определенную последовательность символов в любой момент времени, но длина и содержание последовательности могут быть изменены некоторыми вызовами метода. Буферы строк могут использоваться безопасно для нескольких потоков.
Основными операциями на StringBuffer являются методы добавления и вставки, которые могут быть перегружены, чтобы принять любой тип данных. Каждый метод может эффективно преобразовать указанные данные в строку, а затем добавить или вставить символы строки в буфер строки. Метод добавления всегда добавляет эти символы к концу буфера; Метод вставки добавляет символы в указанной точке. Например, если z относится к объекту буфера строкового буфера, текущий содержимое которого «запуск», этот метод Call z.append («Le») заставляет буфер строкового буфера содержит «испуг», а z.insert (4, «le») изменяет буфер строк, чтобы содержать «звездочка».
3 StringBuilder
StringBuilder: String Variable (безбородовая безопасность).
java.lang.stringbuilder - это переменная последовательность символов, которая недавно добавлена в JDK5.0. Этот класс предоставляет API-совместимый с StringBuffer API, но не гарантированно будет синхронизировать. Этот класс предназначен для простой замены для StringBuffer, когда строковые буферы используются одним потоком (это обычно). Если возможно, рекомендуется сначала взять этот класс, потому что в большинстве реализаций он быстрее, чем StringBuffer. Методы обоих в основном одинаковы.
В большинстве случаев StringBuilder> StringBuffer.
4 Разница между тремя
Основная разница в производительности между типом строки и StringBuffer: String является неизменным объектом. Следовательно, каждый раз, когда изменяется тип строки, будет сгенерирован новый объект строки, а затем указатель будет указывать на новый объект строки. Следовательно, лучше не использовать строку для строк, которые часто изменяют контент, потому что каждый раз, когда генерируется объект, он окажет влияние на производительность системы, особенно когда в памяти слишком много ссылочных объектов, GC JVM начнет работать, и производительность будет ухудшена.
При использовании класса StringBuffer сам объект StringBuffer работает каждый раз, а не генерирует новый объект и изменяет ссылку на объект. Следовательно, в большинстве случаев рекомендуется StringBuffer, особенно когда строковые объекты часто меняются.
В некоторых особых случаях сплайсинг строкового объекта на самом деле интерпретируется JVM как сплайсинг объекта StringBuffer, поэтому скорость строкового объекта не более медленнее, чем объект StringBuffer в эти времена, например,:
Строка S1 = "Это только тест" + "простой" + "; StringBuffer sb = new StringBuilder («Это только»). Append ("simple"). Append ("test"); Генерация объектов строки S1 не более медленнее, чем StringBuffer. Фактически, в JVM, следующее преобразование автоматически выполняется:
Строка S1 = "Это только тест" + "простой" + ";
JVM напрямую рассматривает вышеуказанное утверждение как:
Строка S1 = «Это всего лишь простой тест»;
Так что скорость очень быстрая. Но следует отметить, что если сплайсированная строка поступает из другого строкового объекта, JVM не будет автоматически конвертировать, а скорость не будет такой быстрой, например:
String S2 = "Это только A"; String S3 = "Simple"; String S4 = "test"; String S1 = S2 + S3 + S4;
В настоящее время JVM будет делать это регулярно в оригинале.
В большинстве случаев StringBuffer> String.
4.StringBuffer и StringBuilder
Между ними почти нет разницы. Они в основном называют различными методами родительского класса. Важным отличием является то, что StringBuffer безопасен. Большинство внутренних методов имеют ключевое слово синхронизировано перед ним, что приведет к определенному потреблению производительности. StringBuilder не является безопасным, поэтому он более эффективен.
public static void main (string [] args) бросает исключение {string string = "0"; int n = 10000; long begin = system.currenttimemillis (); for (int i = 1; i <n; i ++) {string+= i; } long End = System.currentTimeMillis (); долго между = конец - начинается; System.out.println («потребляемое время с использованием класса строки:« + между + "ms"); int n1 = 10000; StringBuffer SB = new StringBuffer ("0"); long begin1 = System.currentTimeMillis (); for (int j = 1; j <n1; j ++) {sb.append (j); } long end1 = System.currentTimeMillis (); длинный между 1 = end1 - begin1; System.out.println («Время потребляется с использованием класса StringBuffer:« + между 1 + "MS"); int n2 = 10000; StringBuilder SB2 = New StringBuilder ("0"); long begin2 = System.currentTimeMillis (); for (int k = 1; k <n2; k ++) {sb2.append (k); } long end2 = System.currentTimeMillis (); длинный между 2 = end2 - begin2; System.out.println ("Труто-потребляющий для использования класса StringBuilder:" + MODE2 + "MS"); } Выход:
Время использования String Class: 982 мс.
Хотя это число отличается каждый раз, и ситуация с каждой машиной отличается, есть несколько точек, которые являются определенными, и класс строки потребляет значительно больше, чем два других. Другой момент заключается в том, что StringBuffer потребляет больше, чем StringBuilder, хотя разница не очевидна.
5 стратегий использования
(1) Основные принципы: если вы хотите использовать небольшой объем данных, используйте строку; Если вы используете большой объем данных с одним потоком, используйте StringBuilder; Если вы используете большой объем данных с многопоточным, используйте StringBuffer.
(2) Не используйте «+» класса строки для частых сплайсинга, потому что, если производительность чрезвычайно плохая, вы должны использовать класс StringBuffer или StringBuilder, который является относительно важным принципом в оптимизации Java. Например: при использовании строки, при сплайсингах строк используйте «+», чтобы сформировать временный объект StringBuffer на JVM, и в то же время объект создается на каждой строке. После сплайсинга двух строк необходимо создать 4 объекта! (Строка, которая содержит результат, два строковых объекта и временный объект StringBuffer). Если вы используете StringBuffer, вам нужно только создать 2 объекта! Объект StringBuffer и строки, который имеет последний результат.
(3) Для лучшей производительности их емкость должна быть указана как можно больше при построении фрингбаффера или фрагмента. Конечно, если строка, которой вы работаете, не превышает 16 символов, вам не понадобится. Не указание емкости значительно снизит производительность.
(4) StringBuilder обычно используется внутри метода для выполнения аналогичных функций «+». Потому что ? это безопасно, его можно отказаться после использования. StringBuffer в основном используется в глобальных переменных.
(5) Использование Fryngbuilder в той же ситуации может достичь только повышения производительности примерно на 10% ~ 15% по сравнению с использованием StringBuffer, но он рискует небезопасным. В реальном модульном программировании программист, ответственный за определенный модуль, может быть не в состоянии четко определить, будет ли модуль будет помещен в многопоточную среду. Следовательно, StringBuilder можно использовать только, если вы не уверены, что узкое место системы находится на StringBuffer, и вы уверены, что ваш модуль не будет работать в многопоточном режиме; В противном случае, StringBuffer все еще используется.