3. Ссылочные данные. Строки и типы памяти в Java Flashcards
Какие виды данных есть в java?
Примитивные и ссылочные
Что такое ссылочные типы?
Это такой тип данных, который в качестве значения имеет объект.
К ссылочным типам относятся:
String, массивы, обёртки примитивных типов (Integer, Double, Character, …) и тд.,
а также любой тип, определённый пользователем, то есть все типы, описанные
ключевым словом class
Названия таких типов пишутся с заглавной буквы.
Что такое null?
null является значением по умолчанию для ссылочных типов, которое
означает, что ссылка не указывает ни на какой объект
Какие виды памяти вы знаете в Java?
HEAP (куча) - вся память JVM, которая может быть выделена под объекты ссылочных типов
Stack (стек) - память для локальных переменных, параметров и
промежуточных вычислений выражений
Каким типом является массив?
Ссылочным
Какими свойствами обладает String?
Неизменяемость (immutable), канкатинация не меняет первоначальную строку, а создаёт новую. Имутабельность достигается за счёт того, что в методах класса String создаются новые строки.
Что такое String Pool?
String Pool - область в куче, где хранятся недублирующие строковые значения, созданные как литералы
Как можно создать строку не в Pool’е?
Если создать строковое значение через ключевое слово new, то оно будет помещено не в пул, а просто в кучу(heap), куда попадает любое другое значение ссылочного типа
Как работает сборщик мусора?
Он периодически запускается JVM (когда заканчивается память в Stack’е) и удаляет объекты и переменные, к которым никто не обращается. Работает по принципу поколений
Что сравнивает оператор == для ссылочных типов?
Оператор == проверяет указывает ли ссылки на один и тот же объект или нет
(возвращает boolean).
String str1 = "JBorn" ; String str2 = "JBorn" ; String str3 = "Learn Java" ; String str4 = new String("JBorn"); str1 == str2 true, один и то же объект из пула str1 == str3 false, разные объекты из пула Обратите внимание: str1 == str4 false, ссылки указывают на разные объекты (один в пуле - другой нет)
Какой метод необходимо использовать для сравнения строк по содержимому?
equals(“другая строка”) - проверяет две строки на равенство по содержимому, возвращает
значение типа boolean: true или false. Это переопределенный метод класса Object
Какие методы вы знаете у класса String?
1.isEmpty() - проверяет является ли строка пустой, возвращает значение булевского типа: true
или false. Рекомендуется пользоваться им, а не сравнивать длину строки с 0.
2.equals(“другая строка”) - проверяет две строки на равенство по содержимому. Является переопределениям методом класса Object
3.contains(“подстрока”) - проверяет входит ли (непрерывно) подстрока в данную строку, возвращает значение boolean.
4.replace(‘старый символ’, ‘новый символ’) - заменяет все
вхождения старого символа на новый символ, возвращает новую
строку с измененными символами.
5.split(“шаблон-разделитель”) - делит данную строку по шаблону-разделителю (regex),
разделителями обычно являются “.” (точка), “,” (запятая), “ “ (пробел).
6.toLowerCase() - приводит все символы строки к нижнему регистру и возвращает
новую строку, toUpperCase() - к верхнему.
7. substring(число) - возвращает новую строку, которая является частью исходной, начинающуюся
с указанного аргументом число (индекс) символа. substring(число1, число2) - число2
указывает на индекс символа строки до которого (не включительно) брать подстроку.
8. startsWith(“префикс”) - проверяет начинается ли данная строка на переданный в качестве
аргумента “префикс”, возвращает true или false. endsWith(“постфикс”) - наоборот.
9. trim() - возвращает новую строку, у которой отсутствуют пробелы в начале и в конце
10. replaceAll() — заменяет каждую подстроку данной строки, которая соответствует заданному регулярному выражению, с данной заменой, другими словами — метод позволяет заменить слово в строке.
Какие классы есть в Java для достижения мутабельности строки?
Если нужно работать со строками как с изменяемыми (mutable) объектами,
то на помощь приходят классы StringBuilder и StringBuffer. Кроме того,
когда необходима динамическая конкатенация строк (цикл) рекомендуется
использовать эти классы в целях увеличения Эти классы похожи, практически двойники, они имеют одинаковые конструкторы, одни и те же методы, которые одинаково используются. Единственное их различие состоит в том, что класс StringBuffer синхронизированный и потокобезопасный. То есть класс StringBuffer удобнее использовать в многопоточных приложениях, где объект данного класса может меняться в различных потоках..
- StringBuilder(для однопоточных программ)
- StringBuffer(для многопоточных)
Методы:
Чем отличается StringBuilder от StringBuffer?
Отличие между StringBuilder и StringBuffer одно: StringBuffer использует
синхронизированные методы для работы в многопоточной среде.Для однопоточного кода используйтся StringBuilder
Что такое обёртки? Перечисли их.
Это классы, которые позволяют использовать примитивные типы в виде объектов.
byte - Byte short - Short char - Character int - Integer long - Long float - Float double - Double boolean - Boolean