以下有什麼好處?初始化一個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