Файл: Все примитивные типы и их размеры. Целочисленные byte.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 261
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
Все примитивные типы и их размеры.
Целочисленные
byte – 8 бит хранит целое число от -128 до 127.
short – 16 бит хранит целое число от -32768 до 32767.
int - 32 бит хранит целое число от -2147483648 до 2147483647.
long – 64 бит хранит целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
Вещественные
float - 32 бит хранит число с плавающей точкой от -3.4*1038 до 3.4*1038.
double – 64 бит хранит число с плавающей точкой от -3.4*1038 до 3.4*1038.
Логический
boolean – true/false – в теории может занимать 1 бит, но обычно в зависимости от виртуальной машины JVM занимает 32 бит.
Символьный
char – псевдоцелочисленный тип, размерность 16 бит, можно записать используя систему unicode, либо в десятичной системе.
-
Какая размерность у boolean?
boolean – true/false – в теории может занимать 1 бит, но обычно в зависимости от виртуальной машины JVM занимает 32 бит.
-
Что такое char? Почему над ним можно выполнять арифметические операции?
char – псевдоцелочисленный тип, размерность 16 бит, можно записать используя систему unicode, либо в десятичной системе. Т.К. представление данного типа можно в 10 системе счисления, поэтому и можно производить арифметические операции.
-
Какие есть виды приведения типов? Что такое явные и неявные приведения, с чем связано их наличие?
Есть явные и не явные преобразования
Неявные преобразования происходят автоматически, если выполнены условия:
а) оба типа совместимы
б) Длина целевого типа больше или равна длине исходного типа
Во всех остальных случаях должно использоваться явное преобразование типов.
Так же существуют два типа преобразований:
-
Расширяющее преобразование-выполняется автоматически при преобразовании меньшего по размеру типа в больший: byte в short в char в int в long в float в double -
Сужающее преобразование-выполняется вручную при преобразовании большего по размеру типа в меньший: double в float в long в int в char в short в byte
Java выполняет расширяющие преобразования автоматически, например, если вы присвоили литерал типа int переменной типа double или значение переменной типа char переменной типа int
Сплошные линии обозначают преобразования, выполняемые без потери данных. Штриховые линии говорят о том, что при преобразовании может произойти потеря точности.
Стоит немного пояснить почему, к примеру тип byte не преобразуется автоматически (не явно) в тип char, хотя тип byte имеет ширину 8 бит, а char 16, тоже самое касается и преобразования типа short в char. Это происходит потому, что byte и short знаковые типы данных, а char беззнаковый. Поэтому в данном случае требуется использовать явное приведение типов, поскольку компилятору надо явно указать что вы знаете чего хотите и как будет обрабатываться знаковый бит типов byte и short при преобразовании к типу char.
Сужающее преобразование (narrowing conversion) происходит, если значение преобразуется в значение типа, диапазон которого не шире изначального. Сужающие преобразования не всегда безопасны: например, преобразование целого значения 13 в byte имеет смысл, а преобразование 13000 в byte неразумно, поскольку byte может хранить только числа от −128 до 127. Поскольку во время сужающего преобразования могут быть потеряны данные, Java компилятор возражает против любого такого преобразования, даже если преобразуемое значение укладывается в более узкий диапазон указанного типа
Оператором явного преобразования типов или точнее говоря приведения типов являются круглые скобки, внутри которых указан тип, к которому происходит преобразование – (type).
-
Какие могут быть потери данных при явных приведениях? (ДОП)
a)преобразовании вещественного в целочисленный тип теряется дробная часть,
б) из большего в меньшее
-
Какие потери могут быть при неявных приведениях? (Потери при неявных приведениях возможны потери точности при преобразовании целочисленных в вещественные а именно из long -> float -
Какие потери будут при приведении short в char?
не преобразуется автоматически (не явно) в тип char, хотя тип byte имеет ширину 8 бит, а char 16, тоже самое касается и преобразования типа short в char. Это происходит потому, что byte и short знаковые типы данных, а char беззнаковый. Поэтому в данном случае требуется использовать явное приведение типов, поскольку компилятору надо явно указать что вы знаете чего хотите и как будет обрабатываться знаковый бит типов byte и short при преобразовании к типу char.
Какой тип получим при сложении char + short? (int)
-
Что такое литерал?
Литерал - это по факту значение, которое мы присваиваем переменной. Например int i = 5; 5 - литерал переменной int.
-
Что такое операнд?
Операнд — это сущность, с которой оператор выполняет какие-либо действия.
-
Что такое NaN?Что такое infinity?
Nan (англ. Not-a-Number) – неизвестное значение. Получим, если попробуем вычислить квадратный корень отрицательного числа
infinity – бесконечность. Получим если попробуем поделить на 0
-
Тип переменной var
var используется в объявлении локальной переменной без явного указания типа. При использовании var компилятор Java определяет тип переменной во время компиляции, используя информацию о типе, полученную от инициализатора переменной. Далее выведенный тип используется как статический тип этой переменной.
-
Какие классы-обертки знаешь?
Все братья близнецы примитивных типов, только с заглавной буквы. Кроме int и char. для них Integer и Character соответственно. Классы – обертки нужны для хранения примитивов в коллекциях, либо выразить в программе факт отсутствия значения, делается это с помощью null.
1/ Позволяют не нарушать принцип “все является объектом”, благодаря чему числа, символы и булевы значения true/false не выпадают из этой концепции
2/ Расширяют возможности работы с этими значениями, предоставляя удобные методы и поля
3/ Необходимы, когда какой-то метод может работать исключительно с объектами
-
Расскажи про unboxing, autoboxing в обертках?
Преобразования примитивных типов в ссылочные типы.
Autoboxing – это автоматическая инкапсуляция примитивного типа в аналог класс – обертку.
Character ch = 'a';
Integer i1 = 220;
Double d1 = 300.0;
Boolean b1 = false;
Autoboxingпроисходит в двух случаях
а) При присвоении значения примитивного типа переменной класса – обертки
б) При передачи примитивного типа в параметр метода, класса обертки метода valueOF(тип)
Unboxing – преобразование класса – обертки в примитивный тип. Используется метод
Пример: intValue
Unboxingпроисходит
а) При присвоении экземпляра класса – обертки переменной соответствующего типа
б) В выражениях, в которых один или оба аргумента являются экземплярами класса – оберток (кроме операции на == и !=)
в) При передаче объекта класса обертки в метод ожидающий соответствующий тип
Double d1 = 2.3;
Double d2 = 3.3;
double d3 = i1 + d1 + d2; // распаковка
System.out.println(d3);
-
Расскажи про pool строк и pool примитивов?
Очень подробная статья про пул строк: https://topjava.ru/blog/rukovodstvo-po-string-pool-v-java
Pool строк – это специальное хранилище в куче строк. Пул строк помогает экономить большой объем памяти, но с другой стороны занимает больше времени.
Pool примитивов – у примитивов тоже есть свой pool, но максимальное значение которое они могут хранить от -128 до 127, это сделано для более быстрого доступа, все числа которые превышают значение, помещаться в другое хранилище. Как у byte.
-
Как добавить String’у в pool строк?
Для помещения строки в pool используется метод intern
-
Разницамежду String, StringBuilder и StringBuffer?
String – строковый неизменяемый тип данных, любые действия со строкой приведут к созданию новой строки и т.к. данные действия являются ресурсоемкими, для манипуляции со строками используется StringBuilder и StringBuffer.
StringBuilder – изменяемая строка, обладает высокой производительностью, но менее потокобезопасна.
StringBuffer – изменяемая строка, обладает высокой безопасностью, но менее производительна, потому что обременена синхронизацией
-
Почему не рекомендуються множественные конкартенации(склейка) строк(“Привет”+”Привет”+”Привет”)?
Каждый раз будет создаваться новая строка, для этого нужно использовать StringBuilder и StringBuffer
-
Неизменяемые типы?
Все классы – обертки (Byte,Short,Integer,Long,Float,Double,Boolean,Character), String, BigInteger, BigDecimal
-
Что такое массив и какие на нём есть ограничения?
Массив – структура данных, в которых хранятся элементы одного типа. Инициализация массива ограничена int-овым значением
-
Какая максимальная длина массива?
Максимальная длина вложенных массивов 255
-
С какого числа начинается индекс массива?
С 0
-
Можно ли создать массив отрицательной длины?
Нет, вы не можете использовать отрицательное целое число в качестве размера, размер массива представляет количество элементов в нем, – количество элементов в массиве не имеет смысла.Тем не менее, если вы это сделаете, программа будет скомпилирована без проблем, но при ее выполнении генерируется исключение времени выполнения типа NegativeArraySizeException
-
А со значением null? нет -
Как создать многомерный массив?
int[][] twoDimArray = new int[3][4];
-
Какая максимальная многомерность? 255
-
Что такое метод, возвращаемое значение, аргументы метода?
Метод – блок кода объявлен внутри класса, который содержит некоторую последовательность действий, направленных на решение задачи, метод можно использовать многократно
Возвращаемое значение – это данные которые приходят на место, после вызова метода.
Аргумент метода – параметр который передаться в метод и с которым метод будет работать
-
Отличие метода от функции?
Функция самостоятельная сущность и может существовать без класса, метод может быть только в классе. В java не предусмотрены функции только методы
-
Что такое инкремент и декремент?
Инкремент – оператор который увеличивает целочисленную переменную на 1
Дикремент – уменьшает на 1
Префиксная форма ++а; Сначала прибавит 1
Постфиксаная форма а++; Cначала выполнит действие, а потом изменит переменную
На собеседовании спрашивали int a = 5; a++ + ++a Чему будет равно? После всех операции, будет 12, а= 7
-
Какие логические операции знаешь? Таблица истинности операторов?
-
! (не) – меняет true на false и наоборот -
&(и) - Логическое и, оно же AND или конъюнкция. Обозначается символом “&” между двумя операндами, к которым применяется. -
^ - Исключающее или, XOR, строгая дизъюнкция. В Java обозначается символом “^” между двумя операндами.
По сути выдает true если одно значение false
- Если подряд идут true XOR true XOR true какой будет результат?
false
-
| -(или) в Java, оно же — OR, оно же — дизъюнкция. В Java обозначается символом “|” между двумя операндами. -
&& - сокращение и -
|| - сокращённое или