public class Guess {
public static void main(String[] args){
<sometype> x = <somevalue>;
System.out.println(x == x);
}
}我必须更改某些类型和某些值,以使其返回false?有可能吗?
发布于 2010-01-06 19:04:31
其一:
float x = Float.NaN; 二:
double x = 0.0/0.0;为什么?
正如这里已经提到的,NaN永远不会等同于另一个NaN -请参阅http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
那么为什么这不返回false呢?
Float x = Float.NaN; 答案是,这里不是基元赋值,而是引用赋值。在后台有一个小的自动装箱。这等于:
Float x = new Float(Float.NaN); 它等于:
Float x = new Float(0.0f / 0.0f); 这里的x是对Float对象的引用,而==操作符测试的是引用相等性,而不是值。
要看到这也返回false,测试应该是:
x.doubleValue()==x.doubleValue();,则返回false。
发布于 2010-01-06 19:06:42
是的,有可能,您需要使用:
// Edited for primitives :)
float x = Float.NaN;
// or
double x = Double.NaN;这是因为NaN是一个特例,它不等于它自己。
来自JLS (4.2.3):
NaN是无序的,因此如果一个或两个操作数都为NaN,则数值比较运算符<、<=、>和>=将返回false (§15.20.1)。如果任一操作数为NaN,则相等运算符==返回false;如果任一操作数为NaN,则不等式运算符!=返回true (§15.21.1)。特别地,当且仅当x为NaN时,x!=x为真,而如果x或y为NaN,则(x=y)将为假。
发布于 2010-01-06 19:07:06
这将打印false:
!(x == x)除此之外,如果您使用NaN,它只会输出false
float x = float.NaN;
Console.WriteLine(x == x);https://stackoverflow.com/questions/2012354
复制相似问题