2011-03-23 33 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是有效的初始化值。