Какие типы данных существуют в Java?
В Java типы данных делятся на две большие категории:
1. Примитивные типы (primitive types)
Это базовые, встроенные типы, которые не являются объектами, а хранятся как значения напрямую (в стеке или в полях).
Тип | Размер (бит) | Значение по умолчанию | Диапазон значений | Назначение |
---|---|---|---|---|
byte | 8 | 0 | -128 до 127 | Маленькие целые числа |
--- | --- | --- | --- | --- |
short | 16 | 0 | -32,768 до 32,767 | Целые числа (меньше int) |
--- | --- | --- | --- | --- |
int | 32 | 0 | ~ -2.1 млрд до 2.1 млрд | Стандартный целочисленный тип |
--- | --- | --- | --- | --- |
long | 64 | 0L | ±9 квинтильонов | Длинные целые числа |
--- | --- | --- | --- | --- |
float | 32 | 0.0f | ±3.4×10^38 (с плавающей точкой) | Числа с дробной частью |
--- | --- | --- | --- | --- |
double | 64 | 0.0d | ±1.8×10^308 | Более точные дробные числа |
--- | --- | --- | --- | --- |
char | 16 | '\u0000' | Unicode-символы (от 0 до 65535) | Символы |
--- | --- | --- | --- | --- |
boolean | 1 (логически) | false | true или false | Булевские значения |
--- | --- | --- | --- | --- |
🔸 Эти типы не наследуются от Object, не имеют методов, и работают быстрее, чем ссылочные типы.
📦 2. Ссылочные типы (reference types)
Это все остальные типы, представляющие объекты. Ссылочные типы хранят в себе указатель на объект в куче.
Примеры:
-
Классы — String, Object, Integer, List, Map, LocalDateTime, и любые пользовательские классы.
-
Интерфейсы — Runnable, Serializable, Comparable, List и т. д.
-
Массивы — int[], String[], User[], т. д.
-
Enums — enum Day { MONDAY, TUESDAY }
-
Записи (Record) — c Java 14+: record Point(int x, int y) {}
-
Аннотации — @Override, @Nullable, и др.
🔹 Все ссылочные типы наследуются от базового класса Object.
🔁 Автоупаковка и распаковка
Java автоматически преобразует примитивные типы в соответствующие объектные (и наоборот):
Примитив | Обёртка |
---|---|
int | Integer |
--- | --- |
long | Long |
--- | --- |
float | Float |
--- | --- |
double | Double |
--- | --- |
char | Character |
--- | --- |
boolean | Boolean |
--- | --- |
byte | Byte |
--- | --- |
short | Short |
--- | --- |
int x = 5;
Integer obj = x; // автоупаковка
int y = obj; // автораспаковка
## **💡 Специфические структуры**
### **1\. null**
Значение, которое может принимать любой ссылочный тип, указывающее на отсутствие объекта.
String s = null;
2. var (с Java 10)
Позволяет компилятору самостоятельно вывести тип:
var name = "Alice"; // String
var list = new ArrayList<Integer>(); // ArrayList<Integer>
⚠️ Это не "динамическая типизация" — переменная имеет фиксированный тип, просто он выведен автоматически.
📌 Итого
Java строго типизирована и поддерживает:
-
8 примитивных типов — для работы с базовыми значениями (быстро и экономно)
-
Объектные (ссылочные) типы — все остальное, от String до сложных коллекций
-
Автоматическое преобразование между ними (boxing/unboxing)
-
Пользовательские типы через классы, интерфейсы, enum, record
Понимание типов данных — основа эффективной работы с памятью, производительностью и архитектурой в Java.