Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Если бы класс String, который представляет объекты строк, не допускающих изменения, был единственным доступным средством, в процессе обработки строковых данных для хранения промежуточных результатов нам пришлось бы создавать новые объекты String. В качестве примера рассмотрим последовательность действий компилятора при вычислении следующего выражения:
public static String guillemete(string quote) {
return ‘«’ + quote + ‘»’;
}
Если бы компилятор был ограничен возможностью использования только тех объектов, которые относятся к классу String, выполняемые им операции можно было бы описать такой схемой:
quoted = String.valueOf(‘«’).concat(quote)
.concat(string.valueOf(‘»’));
При Каждом вызове valueOf и concat создается новый объект String, так что в Процессе вычисления рассматриваемого выражения системе пришлось бы построить четыре объекта String, только один из которых пригодился бы в дальнейшем, и понести при этом неоправданно большие накладные расходы, связанные с созданием, инициализацией и утилизацией дополнительных объектов.
На самом деле, однако, компилятор действует более эффективно. В процессе вычислений промежуточных результатов он использует объект класса StringBuffer и создает объект String только в том случае, когда это действительно необходимо. Объекты StringBuffer допускают изменение содержимого, поэтому создавать новые объекты для хранения промежуточных результатов вычислений не требуется. Вычисляя выражение с помощью средств класса StringBuffer, компилятор выполняет следующие операции:
quoted= new StringBuffer().append(‘«’) appendCquote).append(‘»’).toString();
В процессе вычисления выражения компилятор создает единственный объект StringBuffer для хранения всей последовательности символов, инициализирует его посредством нескольких функций append, а затем с помощью метода tostring преобразует Окончательный результат в объект типа String.
Для построения и изменения строк вы вправе воспользоваться средствами Класса StringBuffer непосредственно. В его составе есть несколько конструкторов, описанных ниже.
public StringBuffer()
Создает новый объект StringBuffer со значением "" – пустую строку.
public StringBuffer(String str)
Создает новый объект StringBuffer, содержащий ту же строку, что и объект-параметр stг.
Класс StringBuffer во многом подобен Классу String он поддерживает ряд одноименных методов с теми же контрактами. Однако StringBuffer не является производным от String, поэтому обратное предположение также неверно. Эти классы совершенно независимы – они оба наследуют класс Object.
Дата публикования: 2015-10-09; Прочитано: 293 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!