А в Java определяет ли оператор сравнения
==
отношение равенства для значений примитивных типов? Если нет, то какое из трёх свойств оно нарушает?В головоломке 29 мы узнали, что оператор сравнения не рефлексивный, так как
Double.NaN == Double.NaN
возравщает false
.Головоломка 35 поможет понять, что оператор сравнения не транзитивный. При сравнении двух числовых значений сначала осуществляется приведение типов. Но аккуратнее, конвертация
int
или long
в double
может привести к потере точности. А это чревато!public class Transitive {
public static void main(String[] args) {
long x = Long.MAX_VALUE;
double y = (double)Long.MAX_VALUE;
long z = Long.MAX_VALUE - 1;
System.out.println(x == y);
System.out.println(y == z); // surprise!
System.out.println(x == z);
}
}
Комментариев нет:
Отправить комментарий