В чем разница между статической (строгой) и динамической типизацией?

«В чем разница между статической (строгой) и динамической типизацией?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статическая (строгая) типизация означает, что тип переменной известен и проверяется на этапе компиляции. Тип переменной не может быть изменен после объявления.

Пример на Java:

int number = 10; // Тип `int` объявлен явно
number = "текст"; // Ошибка компиляции: несовместимые типы

Динамическая типизация означает, что тип переменной определяется во время выполнения и может меняться в процессе работы программы.

Пример на Python:

value = 10      # Тип `int`
value = "текст" # Теперь тип `str`. Ошибки нет.

Ключевые различия:

  • Проверка типов: Статическая — во время компиляции; динамическая — во время выполнения (runtime).
  • Безопасность: Статическая типизация предотвращает целый класс ошибок до запуска программы, повышая надежность.
  • Производительность: Статическая типизация позволяет компилятору выполнять оптимизации, что часто приводит к более быстрому коду.
  • Гибкость: Динамическая типизация позволяет быстрее писать и изменять код, но увеличивает риск runtime-ошибок.