Инициализация переменной long в Java: грамотная работа с числами
Быстрый ответ
Для инициализации переменной типа long
в Java применяется числовой литерал со суффиксом 'L':
long luckyNumber = 7L;
Когда вы работаете с числами, превосходящими максимальное значение для типа int
, важно использовать 'L':
long astronomicalNumber = 9223372036854775807L;
// "Это число настолько велико, что даже состояние Джеффа Безоса покажется скромным по сравнению с ним!"
Не забудьте указать L
, иначе вы выйдете за пределы типа int
, что будет влечь за собой ошибки при компиляции.
Когда используется long
Тип Long
применяется для работы с числами, превышающими ограничения типа int
– то есть числами больше 32 бит. Это удобно, когда нужно учесть большие дистанции, выполнить точный отсчёт времени или посчитать количество вздохов на нудных совещаниях.
Распространенные ошибки
Пропущенный суффикс 'L'
Если вы забудете указать суффикс L
при работе с большими числами, интерпретатор будет считать число типом int
, что может вызвать переполнение или потерю данных:
// Ошибочно – число превышает максимальную величину для int и вызовет ошибку
long tooBigForInt = 2147483648;
// Верно
long willFitWithinLimits = 2147483648L;
Строчная буква 'l' вместо 'L'
Использование строчной 'l' вместо заглавной 'L' при ручной инициализации переменной может привести к путанице, поскольку строчная 'l' визуально приближена к цифре '1'. Чтобы избежать недоразумений, всегда используйте заглавную 'L':
// Ставит в тупик
long ambiguousLetterL = 1000l; // "Это 10001 или 1000L?"
// Без двусмысленности
long clearLetterL = 1000L;
Сравнение типов данных
int против long
int
отлично подходит для хранения чисел в умеренных пределах, у него более эффективное использование памяти.long
необходимо использовать при операциях с очень большими числами или когда требуется высокая точность вычислений.
Автоматическое приведение типов
Java автоматически приводит значения типа int
к long
:
int smallNumber = 100;
long bigPlace = smallNumber; // Автоматическое приведение типа
При обратной операции – снижении типа из long
в int
– требуется явное приведение типа:
long bigNumber = 100L;
int smallerPlace = (int) bigNumber; // Требуется явное приведение типа
Визуализация
Инициализация long
в Java – это как выбор правильного размера ящика для хранения ваших ценностей:
long boxForEverything = 0x7fffffffffffffffL; // "Теперь здесь поместятся все мемы Интернета!"
Как выглядят разные ящики?
| Размер ящика | Значение long |
| ------------------------ | ------------------------ |
| Миниатюрный (Min) | -9223372036854775808L |
| Стандартный (Zero) | 0L |
| Огромный | 1234567890L |
Добавление 'L' после каждого числа гарантирует, что ваше число безопасно относится к типу long
.
Лучшие практики и возможные проблемы
Читаемость длинных чисел
Использование символа подчеркивания _
помогает разделять длинные числа на группы для улучшения читаемости:
long cardNumber = 1234_5678_9012_3456L; // Теперь это намного удобнее читать!
Проблемы при приведении типов
Берегите себя от потери точности при приведении long
к типам float
или double
:
long preciseNumber = 123456789123456789L;
double approximateNumber = (double) preciseNumber; // Может привести к потере точности.
Когда диапазон long уже недостаточен
Если вам нужно работать с числами, превосходящими величину, допустимую для long
, используйте BigInteger
.
BigInteger reallyHugeNumber = new BigInteger("1234567891011121314151617181920");
// "Это число заставит задуматься даже самых утонченных ученых!"
Полезные материалы
- Примитивные типы данных (Java Tutorial)
- Все о long (Java SE 11 & JDK 11)
- Почему до сих пор применяют примитивные типы в Java? – Stack Overflow
- Глава 4. Типы, значения и переменные (Java Language Specification)
- Java Practices -> Излишнее инициализирование полей путем присваивания значений 0, false или null
- JavaScript: Понимание сложных аспектов – Первые 3,5 часа (YouTube)
- DZone: Типы данных в Java