Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Классы StringBuilder и StringBuffer
Классы StringBuilder и StringBuffer являются «близнецами» и по своему предназначению близки к классу String, но в отличие от последнего содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять. Основным отличием StringBuilder от StringBuffer является потокобезопасность последнего. Более высокая скорость обработки есть следствие отсутствия потокобезопасности класса StringBuilder. Его следует применять, если не существует вероятности использования объекта в конкурирующих потоках. С помощью соответствующих методов и конструкторов объекты классов StringBuffer, StringBuilder и String можно преобразовывать друг в друга. Конструктор класса StringBuffer (также как и StringBuilder) может принимать в качестве параметра объект String или неотрицательный размер буфера. Объекты этого класса можно преобразовать в объект класса String методом toString() или с помощью конструктора класса String. Следует обратить внимание на следующие методы: void setLength(int n) — установка размера буфера; void ensureCapacity(int minimum) — установка гарантированного минимального размера буфера; int capacity() — возвращение текущего размера буфера; StringBuffer append(параметры) — добавление к содержимому объекта строкового представления аргумента, который может быть символом, значением базового типа, массивом и строкой; StringBuffer insert(параметры) — вставка символа, объекта или строки в указанную позицию; StringBuffer deleteCharAt(int index) — удаление символа; StringBuffer delete(int start, int end) — удаление подстроки; StringBuffer reverse() — обращение содержимого объекта. В классе присутствуют также методы, аналогичные методам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др. /* # 5 # свойства объекта StringBuffer # DemoStringBuffer.java */ package by.bsac.strings; public class DemoStringBuffer { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); System.out.println(" длина —> " + sb.length()); System.out.println(" размер —> " + sb.capacity()); // sb = " Java"; // ошибка, только для класса String sb.append(" Java"); System.out.println(" строка —> " + sb); System.out.println(" длина —> " + sb.length()); System.out.println(" размер —> " + sb.capacity()); sb.append(" Internationalization"); System.out.println(" строка —> " + sb); System.out.println(" длина —> " + sb.length()); System.out.println(" размер —> " + sb.capacity()); System.out.println(" реверс —> " + sb.reverse()); } } Результатом выполнения данного кода будет: длина —> 0 размер —> 16 строка —> Java длина —> 4 размер —> 16 строка —> JavaInternationalization длина —> 24 размер —> 34 реверс —> noitazilanoitanretnIavaJ При создании объекта StringBuffer конструктор по умолчанию автоматически резервирует некоторый объем памяти (16 символов), что в дальнейшем позволяет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости можно указывать в конструкторе. Если длина строки StringBuffer после изменения превышает его размер, то емкость объекта автоматически увеличивается, оставляя при этом некоторый резерв для дальнейших изменений. Методом reverse() можно быстро изменить порядок символов в объекте. Если метод, вызываемый объектом StringBuilder, производит изменения в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuilder. /* # 6 # изменение объекта StringBuilder # RefStringBuilder.java */ package by.bsac.strings; public class RefStringBuilder { public static void changeStr(StringBuilder s) { s.append(" Certified"); } public static void main(String[ ] args) { StringBuilder str = new StringBuilder(" Oracle"); changeStr(str); System.out.println(str); } } В результате выполнения этого кода будет выведена строка: Oracle Certified Объект StringBuilder передан в метод changeStr() по ссылке, поэтому все изменения объекта сохраняются и для вызывающего метода. Для классов StringBuffer и StringBuilder не переопределены методы equals() и hashCode(), т. е. сравнить содержимое двух объектов невозможно, следовательно хэш-коды всех объектов этого типа вычисляются так же, как и для класса Object. При идентичном содержимом у двух экземпляров, размеры буфера каждого могут отличаться, поэтому сравнение на эквивалентность объектов представляется неоднозначным.
|