1. Какие бывают числа?
В программировании мы постоянно работаем с числами — от возраста пользователя до числа звёзд в галактике или копеек на банковском счёту. Но разные задачи требуют разных видов чисел: иногда важно хранить только целые числа, иногда — очень точные дроби, а иногда нужны числа "без минусов".
Целые числа (int и другие)
Целое число — это число без дробной части.
В Java чаще всего используют тип int, но кроме него есть ещё несколько вариантов, которые отличаются размером и диапазоном.
- int — основной "рабочий" тип для целых чисел. Он вмещает очень большие (и маленькие) значения, а памяти занимает не так уж и много. Например, для подсчёта лайков, возраста, количества дней в году почти всегда будет использоваться int.
- long — используется, если значения могут быть очень большими (например, миллиарды или триллионы). Пример: хранить сумму всех просмотров YouTube за всю историю.
- short — экономичный, но редко используемый тип. Подходит там, где много одинаковых маленьких значений (например, аудиоданные, цветовые компоненты).
- byte — для ещё меньших значений, особенно в графике и работе с файлами, где важна экономия памяти.
Дробные числа (double, float)
Иногда нужно работать с числами, у которых есть дробная часть. Например, температура воздуха, средний балл студента, цена товара с копейками.
- double — это тип "по умолчанию" для хранения дробных чисел. Достаточно точный для большинства вычислений (пример: 3.1415926535…).
- float — более лёгкий и менее точный тип, чаще встречается в задачах компьютерной графики или обработке больших массивов данных, где важна экономия памяти.
Специальные числовые типы
- BigInteger — если нужно работать с огромными числами, превышающими стандартные диапазоны, например, в криптографии или вычислениях в астрономии.
- BigDecimal — класс для точных вычислений с дробными числами (финансы, расчёт процентов), помогает избежать неточностей, свойственных double и float.
2. Диапазоны значений
Целые типы могут хранить как положительные, так и отрицательные числа. Это удобно, когда значения могут быть "и выше, и ниже нуля": например, температура, баланс счёта, высота относительно уровня моря.
Пример:
- int : -10, 0, 50
- long : 0, 10, -1000_000_000_000_000_000L
Целые типы
| Тип | Размер | Диапазон значений | Пример использования |
|---|---|---|---|
|
1 байт | -128 до 127 | -128, 0, 127 |
|
2 байта | -32 768 до 32 767 | -1000, 0, 32000 |
|
4 байта | -2 147 483 648 до 2 147 483 647 | -1000000, 0, 2000000 |
|
8 байт | -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Дробные типы
| Тип | Размер | Пример значений | Описание |
|---|---|---|---|
|
4 байта | 3.14f, -0.001f | одинарная точность (7 цифр) |
|
8 байт | 3.1415, -1.7E+308 | двойная точность (15-16 цифр) |
3. Суффиксы для чисел
В некоторых ситуациях нужно явно указать, какой тип ты хочешь использовать для числа. Это делается при помощи суффиксов:
- L или l — для типа long (например, 10000000000L)
- F или f — для типа float (например, 3.14f)
- D или d — для типа double (обычно не нужен, потому что дробные числа без суффикса — это double)
Если не указать суффикс, то по умолчанию целое число считается int, а дробное — double. Например, 42 — это int, а 3.14 — это double.
Зачем это нужно? Например, чтобы не получить ошибку при присваивании большого числа переменной типа long:
long bigNumber = 9000000000L; // если убрать L, будет ошибка компиляции
Разделитель в виде подчёркивания _
Когда числа длинные, легко запутаться в нолях. Для красоты и удобства чтения в Java можно использовать подчёркивания внутри числа.
int population = 146_700_000;
long stars = 100_000_000_000L;
Это абсолютно легально: компилятор игнорирует подчёркивания, а вам удобно сразу "на глаз" видеть разряды. Главное — не ставить подчёркивание в начале, в конце, после точки или перед суффиксом.
4. Символьный тип char: что это и зачем?
Тип char используется для хранения одного символа: буквы, цифры, знака препинания, пробела, спецсимвола и даже смайлика.
Примеры:
char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = 'Ж';
char euro = '€';
char smile = '☺'; // Да, такое тоже можно!
Важные правила:
- Значение типа char записывается в одиночных кавычках: 'A', '7', '#'.
- Это именно один символ! Если написать 'AB' — компилятор будет возмущаться.
- За каждым символом скрывается свой числовой код (Unicode).
Unicode: символы со всего мира
Java использует стандарт Unicode, что позволяет хранить не только латинские буквы, но и кириллицу, иероглифы, эмодзи и даже древнеегипетские иероглифы (если вдруг понадобится).
Интересный факт:
Тип char — это, по сути, 16-битное число (от 0 до 65535), где каждому значению соответствует свой символ.
5. Символы и числа: связь через Unicode
Поскольку каждый символ внутри — это число, мы можем спокойно преобразовывать char в int и обратно.
Пример: узнать Unicode-код символа
public class CharToInt {
public static void main(String[] args) {
char ch = 'A';
int code = ch; // Неявное преобразование char → int
System.out.println("Код символа '" + ch + "': " + code);
}
}
Результат:
Код символа 'A': 65
А теперь наоборот — получить символ по коду:
public class IntToChar {
public static void main(String[] args) {
int code = 1040; // Код буквы 'А' в Юникоде (кириллица)
char ch = (char) code; // Явное преобразование int → char
System.out.println("Символ с кодом " + code + ": " + ch);
}
}
Результат:
Символ с кодом 1040: А
6. Основные примитивные типы Java
| Тип | Размер (бит) | Диапазон значений | Пример значения | Примечание |
|---|---|---|---|---|
|
8 | -128 ... 127 | 42 | Очень редко используется |
|
16 | -32,768 ... 32,767 | 12345 | Для экономии памяти |
|
32 | -2,147,483,648 ... 2,147,483,647 | 1000000 | Основной для целых чисел |
|
64 | ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 | 5000000000L | Для очень больших целых чисел |
|
32 | ~±3.4 × 10-38 ... ±3.4 × 1038 | 3.14f | Дробные числа, низкая точность |
|
64 | ~±1.7 × 10-308 ... ±1.7 × 10308 | 2.718 | Дробные числа, высокая точность |
|
16 | 0 ... 65 535 (Unicode) | 'Ж', 'A', '?' | Один символ |
|
1 | true, false | true | Логическое значение |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ