Действительно ли для сравнения double с int в java?
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance возвращает double и getAttackRange возвращает int. Вышеприведенный код является частью оператора if, и он должен быть правдой. Точно ли сравнение действительно?
Спасибо
Ответы
Ответ 1
Да, он действителен - он будет продвигать int
до double
перед выполнением сравнения.
См. раздел JLS 15.20.1 (Операторы численного сравнения), который ссылается на раздел JLS 5.6.2 (двоичное числовое продвижение ).
Из последнего:
Расширение примитивного преобразования (§5.1.2) применяется для преобразования одного или обоих операндов, как указано в следующих правилах:
Ответ 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");
}