Подтвердить что ты не робот

Действительно ли для сравнения double с int в java?

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance возвращает double и getAttackRange возвращает int. Вышеприведенный код является частью оператора if, и он должен быть правдой. Точно ли сравнение действительно?

Спасибо

4b9b3361

Ответ 1

Да, он действителен - он будет продвигать int до double перед выполнением сравнения.

См. раздел JLS 15.20.1 (Операторы численного сравнения), который ссылается на раздел JLS 5.6.2 (двоичное числовое продвижение ).

Из последнего:

Расширение примитивного преобразования (§5.1.2) применяется для преобразования одного или обоих операндов, как указано в следующих правилах:

  • Если один из операндов имеет тип double, другой преобразуется в double.

  • ...

Ответ 2

При выполнении операций (включая сравнения) с двумя разными числовыми типами Java будет выполнять неявное расширение преобразования. Это означает, что когда вы сравниваете double с int, int преобразуется в double, поэтому Java может затем сравнивать значения как два double s. Таким образом, короткий ответ - да, сравнение int и double действительны, с оговоркой.

Проблема заключается в том, что вы не должны сравнивать два значения float-piont для равенства с помощью операторов ==, <= или >= из-за возможных ошибок в точности. Кроме того, вы должны быть осторожны со специальными значениями, которые может принимать double: NaN, POSITIVE_INFINITY и NEGATIVE_INFINITY. Я настоятельно рекомендую вам провести некоторое исследование и узнать об этих проблемах при сравнении double s.

Ответ 3

Это должно быть хорошо. В операции/сравнения с плавающей запятой, если один аргумент является плавающим/двойным, то другой, являющийся int, также продвигается к тому же.

Ответ 4

Это будет нормально.

Java просто возвращает значение true для числового значения:

    int n = 10;
    double f = 10.0;
    System.out.println(f==n);

Приведенный выше код печатает true.

Ответ 5

да, это абсолютно верно, сравнивая тип данных int и двойной тип данных.

int i =10;
double j= 10.0;
 if (i==j)
{
System.out.println("IT IS TRUE");
}