Базовая информация о типизации.
Базовая информация о типизации в языке программирования Java включает следующие ключевые аспекты, основанные на принципах строгой типизации:
1. Строгая типизация
Java является строго типизированным языком. Это означает, что каждая переменная и каждое выражение имеют строго определенный тип уже на этапе компиляции. Любое несоответствие типов (например, попытка присвоить строку числовой переменной без явного преобразования) вызовет ошибку компиляции. Компилятор проверяет все присваивания и вызовы методов на совместимость типов.
2. Категории типов данных
В Java типы данных делятся на две основные группы (и специальный тип null):
• Примитивные типы (Primitive types): Хранят непосредственно значение. Их всего восемь,:
◦ Целочисленные: byte
(8 бит), short
(16 бит), int
(32 бита), long
(64 бита).
◦ Символьный: char
(16-битный символ Unicode).
◦ Вещественные (с плавающей точкой): float
(32 бита), double
(64 бита).
◦ Логический: boolean
(значения true
или false). Тип boolean
— единственный примитивный тип, который нельзя преобразовать ни в какой другой примитивный тип, и наоборот.
• Ссылочные типы (Reference types): Хранят ссылку (адрес в памяти) на объект, а не сам объект. К ним относятся:
◦ Классы (например, String, Integer).
◦ Интерфейсы.
◦ Массивы.
◦ Переменные типов (type variables). Значение по умолчанию для ссылочных типов — null.
3. Особенности примитивных типов
• Целые числа: По умолчанию целочисленные литералы имеют тип int. Если один из операндов имеет тип long, результат операции будет long. Перед выполнением арифметических операций типы byte, short
и char
автоматически расширяются (повышаются) до int.
• Вещественные числа: По умолчанию литералы с плавающей точкой имеют тип double. Стандарт различает положительный и отрицательный ноль, а также специальные значения: бесконечность (POSITIVE_INFINITY, NEGATIVE_INFINITY) и «не число» (NaN).
4. Классы-обертки (Wrappers)
Для каждого примитивного типа существует соответствующий класс-обертка (reference type), что позволяет использовать примитивы как объекты (например, в коллекциях):
• byte
-> Byte
• int
-> Integer
• double
-> Double
• char
-> Character
и так далее. Существует механизм автоупаковки (autoboxing) и автораспаковки (unboxing), который автоматически преобразует примитивные типы в соответствующие объекты-обертки и обратно при необходимости.
5. Преобразование типов
Преобразование типов бывает двух видов:
• Неявное (автоматическое): Происходит, когда типы совместимы и целевой тип шире исходного (например, int
в long).
• Явное (приведение типов): Требуется, когда возможно потеря данных (например, double
в int).
6. Переменные и константы
• Переменные: Должны быть объявлены перед использованием с указанием типа (например, int a = 10;).
• Константы: Объявляются с ключевым словом final. Значение такой переменной может быть присвоено только один раз и не может быть изменено впоследствии.

