Почему (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
,