Почему (int)(2/0,9) = 2?

Я поместил это в Java, и мне дали результат 2. Интересно, почему это не ArithmeticException, так как не должен (int)(2/0,9) превращаться в 2/0. Вся помощь приветствуется.

1 ответ

Ваш код

(int) (2 / 0.9)

Итак int- приведение применяется только к результату после вычисления 2 / 0.9, Сейчас 2 / 0.9 делит int по double значение. В таком случае int также будет интерпретироваться как double (2.0 в этом случае). Результат, таким образом, как

2.0 / 0.9 = 2.22...

Этот процесс известен как числовое продвижение (здесь используется расширяющее примитивное преобразование JLS§5.1.2). Из JLS§5.6:

Числовое продвижение - это процесс, с помощью которого, учитывая арифметический оператор и выражения его аргументов, аргументы преобразуются в предполагаемый целевой тип T, T выбирается во время продвижения так, что каждое выражение аргумента может быть преобразовано в T а арифметическая операция определяется для значений типа T,

После этого вы бросаете int который будет округлять значение до следующего более низкого целого числа, 2 в этом случае. Таким образом, результат 2,


То, что вы ожидали, будет результатом выражения как

2 / (int) 0.9
// or more explicit:
2 / ((int) 0.9)

который первым бросает 0.9 для int до деления. В этом случае вы бы правильно получили

2 / 0

принося ожидаемый ArithmeticException,

Другие вопросы по тегам