3. Ссылочные данные. Строки и типы памяти в Java Flashcards

1
Q

Какие виды данных есть в java?

A

Примитивные и ссылочные

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое ссылочные типы?

A

Это такой тип данных, который в качестве значения имеет объект.
К ссылочным типам относятся:
String, массивы, обёртки примитивных типов (Integer, Double, Character, …) и тд.,
а также любой тип, определённый пользователем, то есть все типы, описанные
ключевым словом class
Названия таких типов пишутся с заглавной буквы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое null?

A

null является значением по умолчанию для ссылочных типов, которое
означает, что ссылка не указывает ни на какой объект

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие виды памяти вы знаете в Java?

A

HEAP (куча) - вся память JVM, которая может быть выделена под объекты ссылочных типов
Stack (стек) - память для локальных переменных, параметров и
промежуточных вычислений выражений

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Каким типом является массив?

A

Ссылочным

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Какими свойствами обладает String?

A

Неизменяемость (immutable), канкатинация не меняет первоначальную строку, а создаёт новую. Имутабельность достигается за счёт того, что в методах класса String создаются новые строки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое String Pool?

A

String Pool - область в куче, где хранятся недублирующие строковые значения, созданные как литералы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как можно создать строку не в Pool’е?

A

Если создать строковое значение через ключевое слово new, то оно будет помещено не в пул, а просто в кучу(heap), куда попадает любое другое значение ссылочного типа

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Как работает сборщик мусора?

A

Он периодически запускается JVM (когда заканчивается память в Stack’е) и удаляет объекты и переменные, к которым никто не обращается. Работает по принципу поколений

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что сравнивает оператор == для ссылочных типов?

A

Оператор == проверяет указывает ли ссылки на один и тот же объект или нет
(возвращает 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, ссылки указывают на разные объекты
(один в пуле - другой нет)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какой метод необходимо использовать для сравнения строк по содержимому?

A

equals(“другая строка”) - проверяет две строки на равенство по содержимому, возвращает
значение типа boolean: true или false. Это переопределенный метод класса Object

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Какие методы вы знаете у класса String?

A

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() — заменяет каждую подстроку данной строки, которая соответствует заданному регулярному выражению, с данной заменой, другими словами — метод позволяет заменить слово в строке.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Какие классы есть в Java для достижения мутабельности строки?

A

Если нужно работать со строками как с изменяемыми (mutable) объектами,
то на помощь приходят классы StringBuilder и StringBuffer. Кроме того,
когда необходима динамическая конкатенация строк (цикл) рекомендуется
использовать эти классы в целях увеличения Эти классы похожи, практически двойники, они имеют одинаковые конструкторы, одни и те же методы, которые одинаково используются. Единственное их различие состоит в том, что класс StringBuffer синхронизированный и потокобезопасный. То есть класс StringBuffer удобнее использовать в многопоточных приложениях, где объект данного класса может меняться в различных потоках..

  1. StringBuilder(для однопоточных программ)
  2. StringBuffer(для многопоточных)

Методы:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Чем отличается StringBuilder от StringBuffer?

A

Отличие между StringBuilder и StringBuffer одно: StringBuffer использует
синхронизированные методы для работы в многопоточной среде.Для однопоточного кода используйтся StringBuilder

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что такое обёртки? Перечисли их.

A

Это классы, которые позволяют использовать примитивные типы в виде объектов.

byte - Byte
short - Short
char - Character
int - Integer
long - Long
float - Float
double - Double
boolean - Boolean
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое Autoboxing?

A

Автоупаковка - это функция преобразования примитивного типа в эквивалентную ему класс-обёртку.

Autoboxing происходит:

  • При присвоении значения примитивного типа переменной соответствующего класса-обёртки.
  • При передаче примитивного типа в параметр метода, ожидающего соответствующий ему класс-обёртку.

Integer wrapper = 100; // автоупаковка (autoboxing)
int backToPrimitive = wrapper; // автораспаковка (autounboxing)
Если при авторазворачивании обёртка будет равна null, то будет
выброшено исключение NullPointerException:
Integer wrapper = null;
int backToPrimitive = wrapper; // отсюда вылетит NPE

17
Q

Для чего нужны обёртки?

A

Java язык объектно-ориентированный
поэтому требует наличие
ссылочных типов и для примитивов.

18
Q

Что такое пул целых чисел (по аналогиии со String Pool)?

A

В Java есть пул(pool) целых чисел в промежутке [-128;127]. Т.е. если мы создаем Integer в этом промежутке, то вместо того, чтобы каждый раз создавать новый объект, JVM берет их из пула.

Почитать про метод valueof и кэш

19
Q

Как передаются аргументы в метод, по ссылке или по значению?

A

В Java аргументы в метод передаются двумя способами:
1. По значению. При передаче значений примитивных типов в
метод происходит их копирование.
2. По ссылке (фактически по значению, копируется адрес). При
передаче значений ссылочных типов в метод происходит
копирование значений ссылок, то есть адресов