Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

String против StringBuffer

div.main {margin-left: 20pt; margin-right: 20pt} String против StringBuffer

Когда дело касается строковых, используете ли вы String или StringBuffer для хранения строковых данных, может оказать значительный эффект на вашу общую производительность. Сегодня мы рассмотрим оба класса - String и StringBuffer и определим те ситуации, в которых вместо String должен использоваться StringBuffer.

Объект String просто хранит массив символов и предоставляет методы для исполнения операций на этом массиве. Объект String - также единственный объект, который перегружает оператор конкатенации "+". Это позволяет строковым быть созданными конкатенацией одного или нескольких объектов String.

Например:

String fname = "John"; String lname = "Smith"; String fullname = fname + lname; Однако строки - неизменные значения, однажды созданные они не могут изменяться. Всякий раз, когда Вы переназначаете значение строковой переменной, вы на самом деле создаете другой объект String и сообщаете JVM, что нужно использовать недавно созданный объект String как (placeholder) для переменной.

Например: String fname = "John"; /* создан новый объект String Старый объект, ожидающий сборку "мусора" */ fname = "Jack";

Рассмотрим случай, когда строковая переменная должна измениться несколько раз. Каждый раз, когда значение этой строковой переменной изменяется, должен быть создан новый объект String. Это приведет к созданию нескольких объектов String в памяти, ожидающим сборку "мусора". Не упоминая даже о дополнительной нагрузке на ЦП при создании этих новый объектов.

Например:

int i; String contents = null; for(i = 0; i < 10; i++) { contents += "hello worldn"; } /* вывод содержимого на экран */ System.out.println(contents); Вышеупомянутый код создал бы, 10 отдельных объектов String, 9 из которых постоянно находятся в памяти, ожидая сборку "мусора". Большую эффективность даст обработка с помощью объекта StringBuffer.

Объект StringBuffer тоже хранит массив символов, но с некоторыми тонкими различиями.

1. В нем не перегружен метод конкатенации "+".
2. Его содержимое может быть изменено без создания новых экземпляров объекта StringBuffer.

Изменение кода, представленного выше, чтобы воспользоваться преимуществом объекта StringBuffer, требует только нескольких простых изменений.

Пример:

int i; StringBuffer contents = new StringBuffer(); for(i = 0; i < 10; i++) { contents.append("hello worldn"); } /* вывод содержимого на экран */ System.out.println(contents.toString()); Применяя объект StringBuffer, только один объект используется на протяжении действия цикла. Повышение производительности может быть неочевидно в таком малом цикле, как представленный выше. Однако попробуйте проделать это с объектом String, когда вы предполагаете изменять его сотни раз, и вы начнете обращать внимание на разницу.

VanGlass 2000. Оригинал тут.
Перевод Станислав Песоцкий.


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте