Переменные и операторы
Тема дорожной карты · Java
Переменные и операторы в Java — это строительные блоки каждого выражения и оператора в языке, предоставляющие разработчикам инструменты для хранения типизированных данных и вычисления новых значений на JVM. Переменная в Java — это именованная область хранения, типизированная как примитивный тип Java (int, long, double, boolean, char) или ссылочный тип (любой класс, интерфейс, массив или экземпляр Generics), объявляемая с необязательными модификаторами (final, static, volatile, transient), влияющими на область видимости, изменяемость и семантику памяти JVM. Операторы Java охватывают шесть категорий: арифметические (+, -, *, /, %), реляционные (==, !=, <, >, <=, >=), логические (&&, ||, !), побитовые (&, |, ^, ~, <<, >>, >>>), операторы присваивания (=, +=, -=, *= и др.) и тернарный условный (condition ? a : b) — каждый с определённым приоритетом и ассоциативностью, используемыми компилятором для генерации корректного JVM-байткода. Ключевое слово var (Java 10+) обеспечивает вывод типов локальных переменных, позволяя писать var map = new HashMap<String, List<Integer>>() без повторения типа в правой части, а final var делает переменную с выведенным типом неизменяемой — паттерн, улучшающий читаемость в конвейерах Stream API и циклах for-each. Понимание переменных и операторов Java — включая переполнение целых чисел, точность чисел с плавающей точкой (double vs BigDecimal), ссылочное равенство (==) в сравнении с равенством по значению (equals()), и разницу между volatile и synchronized для общих переменных — является обязательной основой для всех продвинутых тем Java.
Как это работает
Переменные и операторы покрывает классы (единица компиляции), примитивные типы (int, long, double, boolean — не объекты), reference-типы (объекты, массивы, String — на heap), управление (if/else, switch — теперь со стрелочной формой и pattern matching в 21+), циклы (for, while, for-each), пакеты + импорты, модификаторы доступа (public/protected/package-private/private). Современная Java: var для type inference (10+), текстовые блоки """...""" (15+), records (16+), sealed classes (17+), pattern matching (21+).
Когда применять
Современные фичи — при таргете 17+: records для DTO (срезает 90% бойлерплейта), var для type-inference локальной переменной (когда RHS очевиден), текстовые блоки для multi-line строк, sealed-типы для закрытых иерархий. var — не для полей и возвратов методов (теряется читаемость). Optional — осторожно; никогда .get() без проверки; используйте .orElse(), .map(), .ifPresent().
Типичные ошибки
Ловушки Переменные и операторы: сравнение строк == вместо .equals() (классика); примитивные массивы там, где коллекции лучше; игнор Optional и возврат null (NPE-чума продолжается); String s = ""; for(...) s += x; (квадратично — используйте StringBuilder). Читайте Java-туториал для вашей версии; старые туториалы отстают.