Ответ
Примитивные типы (primitive types) в Java отличаются от ссылочных типов (объектов) по следующим ключевым критериям:
| Критерий | Объяснение | Пример/Следствие |
|---|---|---|
| Не являются объектами | Не имеют методов, не наследуют java.lang.Object. |
int i = 5; // У i нет методов типа .toString() |
| Хранят значение напрямую | В переменной хранится само значение, а не ссылка на объект в куче (Heap). | Эффективно по памяти и скорости доступа. |
| Фиксированный размер в памяти | Размер определён языком и не зависит от платформы. | int – 4 байта, long – 8 байт, boolean – ~1 бит (точно не специфицировано). |
| Значение по умолчанию | Инициализируются, если не задано явно. Для локальных переменных — обязательна явная инициализация. | Поля класса: int → 0, boolean → false. Локальная переменная: int x; // Ошибка компиляции |
Не могут быть null |
Могут содержать только значения из своего диапазона. | Для представления "отсутствия значения" используют классы-обёртки (Integer). |
Примеры примитивных типов:
byte b = 100; // 1 байт, целое
short s = 1000; // 2 байта, целое
int i = 100000; // 4 байта, целое (наиболее распространён)
long l = 100L; // 8 байт, целое
float f = 3.14f; // 4 байта, с плавающей точкой
double d = 3.14; // 8 байт, с плавающей точкой (наиболее распространён)
char c = 'A'; // 2 байта, символ Unicode
boolean flag = true; // логическое значение
Сравнение с обёртками: Использование int вместо Integer предпочтительнее в циклах и вычислениях из-за отсутствия накладных расходов на создание объекта и автоупаковку/распаковку (boxing/unboxing).
Ответ 18+ 🔞
А, примитивные типы в Java! Ну это ж классика, блядь, как Герасим с Муму! Сейчас разжуём, в чём тут соль, а то некоторые думают, что int и Integer — это одно и то же. Хуй там, на самом деле!
Смотри, есть у нас два лагеря, как в хорошем боевике: примитивы — это простые, работяги-одиночки, а ссылочные типы (объекты) — это уже целые конторы со своей бюрократией.
Вот тебе разбор полётов, почему примитивы — это отдельная каста, блядь:
| Критерий | Объяснение | Пример/Следствие |
|---|---|---|
| Не являются объектами | Это как голый кирпич, ёпта. Никаких методов у него нет, он в Object не вписан. |
int i = 5; // Попробуй у i вызвать .toString() — получишь пиздюлину от компилятора! |
| Хранят значение напрямую | В переменной лежит само число, а не бумажка с адресом, где это число лежит в куче. | Быстро, чётко, без лишней ебли с указателями. Прямо в регистр процессора засунуть можно. |
| Фиксированный размер в памяти | Размер прописан в стандарте, и он везде одинаковый. Не зависит от того, на каком ты компе сидишь. | int — всегда 4 байта, хоть в Африке, хоть в Сибири. boolean — это вообще отдельная песня, там под капотом может и бит один быть, но точно не скажешь. |
| Значение по умолчанию | Если ты в классе объявил поле и не проинициализировал — компилятор сам за тебя нулики подставит. Но локальную переменную в методе — инициализируй сам, а то получишь по ебалу! | Поле класса: int count; станет 0. В методе: int x; System.out.println(x); — это прямой билет в ошибку компиляции, ядрёна вошь! |
Не могут быть null |
Они либо число, либо не число, но пустоты в них нет. | Хочешь обозначить "значение отсутствует"? Придётся брать его старшего брата — класс-обёртку Integer. Вот он уже может быть null, сука. |
Вот они, красавцы, все в сборе:
byte b = 100; // Маленький, 1 байт
short s = 1000; // Чуть побольше, 2 байта
int i = 100000; // Рабочая лошадка, 4 байта, его везде используют
long l = 100L; // Долговязый, 8 байт, для самых больших чисел
float f = 3.14f; // Плавающая точка, 4 байта, но с буквой 'f' в конце!
double d = 3.14; // Точность двойная, 8 байт, его чаще юзают
char c = 'A'; // Символ, 2 байта, для букв и иероглифов
boolean flag = true; // Ну тут всё ясно, правда или ложь
Про обёртки: Запомни раз и навсегда, чувак. Если у тебя тяжёлые вычисления в цикле на миллион итераций — юзай int. Потому что Integer — это уже объект, его создавать, память под него выделять... Это овердохуища накладных расходов! Автоупаковка и распаковка (boxing/unboxing) — они тихие, но жрут производительность, если их бездумно применять. Так что думай головой, что тебе нужно: скорость и простота или возможность null и методы.