Ответ
В Java определено 8 примитивных типов, которые не являются объектами и хранятся по значению (обычно в стеке).
| Тип | Размер | Диапазон / Значения | По умолчанию | Пример |
|---|---|---|---|---|
byte |
8 бит | от -128 до 127 | 0 |
byte b = 100; |
short |
16 бит | от -32,768 до 32,767 | 0 |
short s = 30_000; |
int |
32 бит | от -2³¹ до 2³¹-1 | 0 |
int count = 1_000_000; |
long |
64 бит | от -2⁶³ до 2⁶³-1 | 0L |
long big = 10_000_000_000L; |
float |
32 бит | ~±3.4e-38 до ~±3.4e+38 | 0.0f |
float pi = 3.14f; |
double |
64 бит | ~±1.7e-308 до ~±1.7e+308 | 0.0d |
double price = 19.99; |
char |
16 бит | Unicode u0000 до uffff (0 до 65535) |
u0000 |
char grade = 'A'; |
boolean |
не определен | true или false |
false |
boolean isReady = true; |
Ключевые особенности и best practices:
- Литералы: Для
longиспользуйте суффиксL, дляfloat—fилиF.long bigNumber = 123L; float precise = 2.5f; - Автоприведение (widening): Возможно неявное приведение от меньшего типа к большему (например,
int→long), но не наоборот. - Упаковка/Распаковка (Boxing/Unboxing): Примитивы автоматически конвертируются в соответствующие классы-обёртки (
Integer,Doubleи т.д.) и обратно.Integer boxed = 5; // Автоупаковка (int -> Integer) int unboxed = boxed; // Автораспаковка (Integer -> int) - Выбор типа: Используйте
intдля целых чисел по умолчанию,double— для дробных.byte/shortэкономят память в больших массивах.