Перейти к содержанию
Educora
Начальный15 мин2 / 18

Переменные, типы и операторы

Научись объявлять переменные и познакомься с восемью примитивными типами Java, арифметическими операторами и приведением типов.

Проверь себя
В этом уроке ты узнаешь
  • Объявлять переменную с типом и присваивать ей значение
  • Выбирать подходящий примитивный тип для задачи
  • Правильно вычислять с целочисленным делением, остатком и приведением типов

Интернет-магазин должен помнить название каждого товара, его цену, сколько штук осталось на складе и действует ли на него скидка. Программы хранят такие данные в переменных. В Java у каждой переменной есть заранее известный тип, и он никогда не меняется, — такие языки называют статически типизированными.

Объявление переменных

Чтобы создать переменную, сначала пишут тип, затем имя и при желании сразу задают значение через =: int age = 14;. Позже переменной можно присвоить новое значение, но не значение другого типа: записать текст в переменную int не получится.

Java
public class Main {
    public static void main(String[] args) {
        String name = "Leyla";
        int age = 14;
        double height = 1.62;
        boolean isStudent = true;
        char grade = 'A';
        System.out.println(name + " is " + age + " years old.");
        System.out.println("Height: " + height + " m");
        System.out.println("Student: " + isStudent + ", grade: " + grade);
        age = age + 1;
        System.out.println("Next year: " + age);
    }
}
Ожидаемый результат
Leyla is 14 years old.
Height: 1.62 m
Student: true, grade: A
Next year: 15

Примитивные типы

В Java восемь примитивных типов — самых простых «кирпичиков» языка. Они различаются тем, сколько памяти занимают и какие значения могут хранить. Для целых чисел обычно выбирают int, для дробных — double.

ТипРазмерЧто хранитПример
byte8 битцелые числа от −128 до 127byte level = 5;
short16 битцелые числа от −32 768 до 32 767short year = 2026;
int32 битапримерно ±2,1 миллиардаint people = 10_000_000;
long64 битапримерно ±9,2 · 10¹⁸long stars = 3_000_000_000L;
float32 битадробное число, точность ~7 цифрfloat t = 36.6f;
double64 битадробное число, точность ~15–16 цифрdouble price = 9.99;
char16 битодин символ (Unicode)char grade = 'A';
boolean–true или falseboolean ok = true;
Литерал long заканчивается на L, а float — на f. Подчёркивания _ помогают читать большие числа.

String в этом списке нет: это не примитивный тип, а класс — поэтому он пишется с заглавной буквы. Со строками ты подробно познакомишься в следующем уроке. Обрати внимание: значение char пишется в одинарных кавычках ('A'), а String — в двойных.

Интерактив
Загрузка симуляции…
byte состоит из 8 бит. Переключай биты: 8 бит дают 256 разных комбинаций, и Java использует их для чисел от −128 до 127.

Арифметические операторы

В Java есть операторы +, -, *, / и % (остаток от деления). Самая важная тонкость: при делении двух целых чисел результат тоже целый — дробная часть просто отбрасывается. То есть 17 / 5 равно 3, а не 3.4.

Java
public class Main {
    public static void main(String[] args) {
        int a = 17;
        int b = 5;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a / b);
        System.out.println(a % b);
        System.out.println(17.0 / 5);
        int count = 10;
        count += 5;
        count++;
        System.out.println(count);
    }
}
Ожидаемый результат
22
12
85
3
2
3.4
16

Как только одно из чисел дробное (17.0), результат тоже становится дробным. Запись count += 5 — сокращение от count = count + 5; так же работают -=, *= и /=. count++ увеличивает переменную на 1, а count-- уменьшает на 1.

Пример: минуты в часы

Фильм длится 135 минут. Как показать это время в часах и минутах?

Показать решение
Часы — целочисленное деление: 135 / 60 = 2.
Оставшиеся минуты — остаток: 135 % 60 = 15.
Строка System.out.println(135 / 60 + " h " + 135 % 60 + " min"); выведет 2 h 15 min.

Приведение типов

Иногда значение нужно перевести из одного типа в другой. От меньшего типа к большему (расширение, например int → double) Java преобразует сама и без потерь. От большего к меньшему (сужение, например double → int) информация может потеряться, поэтому такое приведение нужно запросить явно, указав тип в скобках: (int) price.

Java
public class Main {
    public static void main(String[] args) {
        int apples = 7;
        double d = apples;
        System.out.println(d);
        double price = 9.99;
        int whole = (int) price;
        System.out.println(whole);
        int sum = 7, people = 2;
        System.out.println(sum / people);
        System.out.println((double) sum / people);
        System.out.println((int) 'A');
        System.out.println((char) 66);
        int max = Integer.MAX_VALUE;
        System.out.println(max + 1);
    }
}
Ожидаемый результат
7.0
9
3
3.5
65
B
-2147483648
  • (int) 9.99 даёт 9: дробная часть отбрасывается, а не округляется.
  • В (double) sum / people сначала sum приводится к double, поэтому деление идёт с дробной частью: 3.5.
  • char на самом деле число: код символа 'A' — 65, а 66 — это 'B'.
  • Если прибавить 1 к максимальному int, произойдёт переполнение (overflow): значение «перескочит» на самое маленькое отрицательное число.

Главное

  • Java — статически типизированный язык: переменную объявляют как тип имя = значение;, и её тип не меняется.
  • Примитивных типов восемь: byte, short, int, long, float, double, char, boolean; а String — это класс.
  • Деление двух целых чисел даёт целое: 17 / 5 = 3, 17 % 5 = 2.
  • Расширение происходит автоматически, а для сужения нужно явное приведение: (int) 9.99 = 9.
  • final создаёт константу, а var позволяет компилятору самому определить тип.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Что выведет System.out.println(17 / 5);?