以下有什么好处?初始化一个double和它的getter
private double pro;
pro = Double.NaN;
为什么不把它
pro = 0.0;
获取方法为:
public double getpro() {
if (Double.isNaN(pro))
somemethod();
return pro;
}
以下有什么好处?初始化一个double和它的getter
private double pro;
pro = Double.NaN;
为什么不把它
pro = 0.0;
获取方法为:
public double getpro() {
if (Double.isNaN(pro))
somemethod();
return pro;
}
因为NanN
代表 “不是一个数字”,它通常是一个暗示,数量未已初始化。你可以使用pro = 0.0;
,那也可以。我认为这个问题更像是一种风格。
我改变了初始化,但得到了不好的结果,是因为getter? – cMinor 2011-03-23 03:49:41
因为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
在Java中,原始类型的变量不能是未定义的(就像任何值类型一样,但在Java中,其他所有变量都是引用类型)。存在于浮点数中的NaN转角情况并不意味着变量未定义。 NaN可以是有效计算的结果(在语言定义方面有效)。例如,sin(a/b)== NaN,如果'a'远大于'b' ... 如果您需要表示未定义状态,则必须另外使用其他内容。 – 2013-05-19 23:12:07
我猜你的情况,NaN
是变量pro
暗示未初始化和0.0是有效的初始化值。
0.0是有效值和实数,而NaN不是(不是数字)。 – 2011-03-23 03:47:42