Ответ
Строгая (статическая) типизация Java требует явного объявления типа переменной и проверяет совместимость типов на этапе компиляции. Для примитивных типов (int, double, boolean, char и др.) это означает:
- Запрет неявных сужающих преобразований (lossy conversion). Компилятор не позволит автоматически присвоить значение типа с большей емкостью переменной с меньшей, так как это может привести к потере данных.
double price = 100.99; // int cost = price; // ОШИБКА КОМПИЛЯЦИИ: возможна потеря точности int cost = (int) price; // Требуется явное приведение типа (cast) - Разрешены только безопасные неявные расширяющие преобразования (например,
int→long,float→double). - Отсутствие автоматического приведения к
boolean. В отличие от C/C++, числовые типы или указатели не конвертируются вtrue/false.int flag = 1; // if (flag) { ... } // ОШИБКА КОМПИЛЯЦИИ: требуется boolean if (flag != 0) { ... } // Корректно - Примитивы не могут иметь значение
null. Это гарантирует отNullPointerExceptionпри работе с ними, но требует использования классов-оберток (Integer,Double) для представления "отсутствующего" значения.
Сравнение с ссылочными типами: Для объектов правила приведения строже — требуется не только явный cast, но и проверка на совместимость классов (instanceof). Примитивы же участвуют в численных promotion rules, определенных в JLS.