#String, StringBuffer и StringBuilder — Java OPP 12
(В разработке)
Нас уже не должны пугать ключевые слова с большой буквы. Нам известны как минимум два из них String и Scanner. StringBuffer и StringBuilder родные братья уже давно изученного типа данных String.
Чем был плох String? #
String всем прекрасен, только он неизменяем (immutable). И операции со строковыми величинами иногда дороги в потреблении ресурсов. Например, если мы в цикле изменяем строку добавляя к ней символы. Java каждый раз создаёт новый String. Пример:
public class MyString {
public static void main(String[] args) {
triangle(10);
}
private static void triangle(int n) {
String star = "*";
String row = "";
for (int i = 0; i < n; i++) {
row = row + star;
System.out.println(row);
}
}
}
Короткая рекомендация - использовать String для редко изменяемых переменных. Например для имени, фамилии, адреса пользователя.
StringBuffer и StringBuilder, почему сразу два новых типа? #
StringBuffer и StringBuilder абсолютно идентичные классы и их следует использовать для часто изменяемых строк. Различие в том, что
StringBuffer синхронизированный(synchronized) и потокобезопасный. StringBuilder однопоточный и не потокобезопасный.
Что такое синхронизация, коротко #
Представьте, что вы пишите приложение для продажи ЖД-билетов. И вы не можете дважды продать одно место. Синхронизация блокирует метод, если один из потоков его запустил. То есть в многопоточном приложении доступ к продаже ведётся поочерёдно. В однопоточном приложении доступ разрешается всем сразу. Совсем коротко, синхронизация более дорогая в ресурсах, но по другому проблему доступа решить не всегда возможно.