问题
我想知道这个问题是否可以用Java解决(我是语言新手)。这是代码:
class Condition {
// you can change in the main
public static void main(String[] args) {
int x = 0;
if (x == x) {
System.out.println("Ok");
} else {
System.out.println("Not ok");
}
}
}
我在我的实验室收到了以下问题:如何在不修改条件本身的情况下跳过第一种情况(即使得2242513905条件为假)?
#1 热门回答(169 赞)
一种简单的方法是使用Float.NaN
:
float x = Float.NaN; // <--
if (x == x) {
System.out.println("Ok");
} else {
System.out.println("Not ok");
}
Not ok
你也可以用Double.NaN
做同样的事情。
From**JLS§15.21.1。**数字平等运营商==
和!=
:
根据IEEE 754标准的规则执行浮点相等性测试:如果任一操作数为NaN,则==的结果为假,但!=的结果为真。实际上,当且仅当x的值是NaN时,测试x!= x才为真。 ...
#2 热门回答(157 赞)
int x = 0;
if (x == x) {
System.out.println("Not ok");
} else {
System.out.println("Ok");
}
#3 热门回答(147 赞)
由Java Language SpecificationsNaN
不等于NaN
。
因此导致x
等于NaN
的任何行都会导致这种情况,例如
double x=Math.sqrt(-1);
从Java语言规范:
浮点运算符不会产生例外(第11节)。溢出的操作产生有符号的无穷大,下溢的操作产生非规范化值或带符号的零,并且没有数学上确定结果的操作产生NaN。以NaN作为操作数的所有数值运算都会产生NaN。如已经描述的那样,NaN是无序的,因此涉及一个或两个NaN的数字比较操作返回false,并且涉及NaN的任何!=比较返回true,包括当x是NaN时x!= x。