| Сравнение объектов, часть 2-я - 0.0 и -0.0 |
|
|
Страница 2 из 3
Значение NaN
NaN расшифровывается как Not-a-Number. Это значение появляется в результате нелегальных математических операций, скажем, деления 0.0 на 0.0, бесконечности на бесконечность и т.п.
Особенностью этого значения является то, что оно не равно самому себе. Т.е.:
float x = 0.0f/0.0f;
System.out.println("x="+x);
System.out.println("x==x: "+(x==x));
... даст в результате...
x=NaN
x==x: false
Чем это может обернуться при сравнении объектов? Если поле объекта будет равно NaN, то сравнение даст false, т.е. объекты гарантированно будут считаться неравными. Хотя по логике вещей мы можем хотеть как раз обратного.
Добиться нужного результата можно, используя метод Float.isNaN(float). Он возвращает true, если аргумент - NaN. На сравнение битовых представлений я бы в этом случае не полагался, т.к. оно не стандартизовано.
Пожалуй, о примитивах хватит. Перейдем теперь к тонкостям, появившимся в Java с версии 5.0. И первый момент, которого я бы хотел коснуться -
|
|||||