JavaRush /Курсы /JAVA 25 SELF /Числа и символы в Java

Числа и символы в Java

JAVA 25 SELF
6 уровень , 1 лекция
Открыта

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

Целые типы

Тип Размер Диапазон значений Пример использования
byte
1 байт -128 до 127 -128, 0, 127
short
2 байта -32 768 до 32 767 -1000, 0, 32000
int
4 байта -2 147 483 648 до 2 147 483 647 -1000000, 0, 2000000
long
8 байт -9 223 372 036 854 775 808
до 9 223 372 036 854 775 807
-10_000_000_000, 1

Дробные типы

Тип Размер Пример значений Описание
float
4 байта 3.14f, -0.001f одинарная точность (7 цифр)
double
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

Тип Размер (бит) Диапазон значений Пример значения Примечание
byte
8 -128 ... 127 42 Очень редко используется
short
16 -32,768 ... 32,767 12345 Для экономии памяти
int
32 -2,147,483,648 ... 2,147,483,647 1000000 Основной для целых чисел
long
64 ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 5000000000L Для очень больших целых чисел
float
32 ~±3.4 × 10-38 ... ±3.4 × 1038 3.14f Дробные числа, низкая точность
double
64 ~±1.7 × 10-308 ... ±1.7 × 10308 2.718 Дробные числа, высокая точность
char
16 0 ... 65 535 (Unicode) 'Ж', 'A', '?' Один символ
boolean
1 true, false true Логическое значение
1
Задача
JAVA 25 SELF, 6 уровень, 1 лекция
Недоступна
Создание инвентаря для героя RPG 🎮
Создание инвентаря для героя RPG 🎮
1
Задача
JAVA 25 SELF, 6 уровень, 1 лекция
Недоступна
Подсчёт сокровищ в драконьем логове 🐉
Подсчёт сокровищ в драконьем логове 🐉
1
Задача
JAVA 25 SELF, 6 уровень, 1 лекция
Недоступна
Расшифровка древних рун 🔮
Расшифровка древних рун 🔮
1
Задача
JAVA 25 SELF, 6 уровень, 1 лекция
Недоступна
Двусторонняя магия символов и чисел ✨
Двусторонняя магия символов и чисел ✨
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Xaxatumba Уровень 38
5 ноября 2025
В intellij idea в плагине JavaRush нет задач к Уровню 6. Точнее описание задачи есть (название уровень и условие), а вот пакета с задачей содержащей класс Solution нет. Сам класс находится в Ответе.
Xaxatumba Уровень 38
5 ноября 2025
Сам создал проблему сам решил. Удалил проект JavaRus из ИДЕИ. Отключил плагин. Удалил проект из компьютера. Создал новый, включил плагин JavaRush. Залогинился заново. Скачал JDK автоматом и всё появилось. Волшебство да и только )
Rust =)) Уровень 7
13 декабря 2025
😀😀😀
Ksanders Уровень 32
27 сентября 2025
В лекции:

Зачем это нужно? Например, чтобы не получить ошибку при присваивании большого числа переменной типа long:
long bigNumber = 9000000000L; // если убрать L, будет ошибка компиляции
Но не объясняется, зачем это делать - по идее же мы явно указали что типо long, почему тогда без "L" будет ошибка компиляции? 🧐
Серега Батенин Уровень 12
28 сентября 2025
То что мы слева написали, что переменная типа long мы просто объявили компилятору, что нам нужно столько то места в памяти для хранения данных. А то непосредственное число, что справа от знака равно по умолчанию считается int'ом. И когда вы там пишется число, которое без суффикса L слишком большое для int'a компилятор начинает ругаться. Поэтмоу мы ставим суффикс, чтобы явно дать понять компилятору, что число не int Точно также если ты в переменную типа float попытаешься присвоить значение например 3.14 и получишь ошибку компиляции, потому что все дробные числа считаются типа double, а они больше в 2 раза по размеру, чем float
Konstantin Уровень 7
8 сентября 2025
В итоге 11111111 (-1) + 00000001 (+1) --- 100000000 где старший разряд отбрасывается и получается 0
Konstantin Уровень 7
8 сентября 2025
Интересно как в java хранят отрицательные числа Положительное число 1: 00000001 Отрицательно число -1: 11111111