Nano Hash - криптовалюты, майнинг, программирование

Понимает ли компилятор Java условия, заданные в операторах if?

Следующий код не выдает ошибку компиляции Unreachable statement.

if(true)return;
int x;

В течение многих лет я считал, что это потому, что компилятор не обращает особого внимания на заданные условия.

Сегодня я обнаружил, что компилятор понимает условия,

int x;
if (true) {
    x = 0;
}
int y = x;

потому что в противном случае это должно привести к другой ошибке компиляции variable x might not have been initialized. Который на самом деле отлично компилируется и работает. Так,

Понимает ли компилятор Java условия, заданные в операторах if?


  • Я думаю, что Java будет оценивать константные выражения, она их понимает. Конечно, другие выражения должны оцениваться во время выполнения. 22.06.2018

Ответы:


1

Unreachable Statements посвящен точному объяснению слова «достижимый». Идея состоит в том, что должен быть какой-то возможный путь выполнения от начала конструктора, метода, инициализатора экземпляра или статического инициализатора, содержащего оператор, до самого оператора. При анализе учитывается структура высказываний. За исключением специальной обработки операций while, do и операторов, выражение условия которых имеет постоянное значение true, значения выражений не учитываются при анализе потока.

Например, компилятор Java примет код:

int n = 5;
while (n > 7) k = 2;

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

Правила в этом разделе определяют два технических термина:

  • достижим ли оператор

  • может ли оператор завершиться нормально

Приведенные здесь определения допускают нормальное завершение оператора только в том случае, если он достижим.

Чтобы сократить описание правил, обычное сокращение «iff» используется для обозначения «если и только если».


Источник :

22.06.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..