2011-03-23 48 views
0

以下有什么好处?初始化一个double和它的getter

private double pro; 
pro = Double.NaN; 

为什么不把它

pro = 0.0; 

获取方法为:

public double getpro() { 
    if (Double.isNaN(pro)) 
     somemethod(); 
    return pro; 
} 
+1

0.0是有效值和实数,而NaN不是(不是数字)。 – 2011-03-23 03:47:42

回答

2

因为NanN代表 “不是一个数字”,它通常是一个暗示,数量未已初始化。你可以使用pro = 0.0;,那也可以。我认为这个问题更像是一种风格。

+0

我改变了初始化,但得到了不好的结果,是因为getter? – cMinor 2011-03-23 03:49:41

0

因为NaN上的任何操作都会导致NaN。虽然0.0的操作可能会导致好像pro设置为某个值。虽然NaN可能用于表示pro尚未定义,但您的情况为

 Double d =Double.NaN; 
    System.out.println(d*10); 
    System.out.println(10/d); 
    System.out.println(d/10); 
    System.out.println(d+10); 

导致

NaN 
NaN 
NaN 
NaN 

d=0.0会导致类似

0.0 
Infinity 
0.0 
10.0 
+0

在Java中,原始类型的变量不能是未定义的(就像任何值类型一样,但在Java中,其他所有变量都是引用类型)。存在于浮点数中的NaN转角情况并不意味着变量未定义。 NaN可以是有效计算的结果(在语言定义方面有效)。例如,sin(a/b)== NaN,如果'a'远大于'b' ... 如果您需要表示未定义状态,则必须另外使用其他内容。 – 2013-05-19 23:12:07

0

我猜你的情况,NaN是变量pro暗示未初始化和0.0是有效的初始化值。