2010-12-02 21 views
33

我已經看到了一些這樣的符號,但我無法找到任何陌生吧,F和D在數字文字結尾處的含義是什麼?

double d = 5D; 
float f = 3.0F; 

什麼是d和F背後究竟5意思?

+0

對於那些來自C:1)ANSI C中不存在`d`後綴,只能作爲GNU擴展。 2)`1f`在C中是不可能的,你必須使用`1.0f`。 3)對於十六進制整數升,「d」和「f」不起作用,因爲它們會與數字本身模糊不清,例如, `0x1f`是`31`,而不是`1.0f` – 2015-02-23 10:20:04

回答

38

意味着這些數字分別是雙打和浮動。假設你有

void foo(int x); 
void foo(float x); 
void foo(double x); 

然後調用

foo(5) 

編譯器可能會難倒。這就是爲什麼你可以說55f5.0來指定類型。

+0

用這個,是5.0 == 5d? – Ungeheuer 2016-12-04 22:33:43

0

它定義常數5和3.0的數據類型。

2

D代表double,F代表float。偶爾需要添加這些修飾符,因爲在這種情況下5被認爲是整數,而3.0是雙精度。

5

它們是float和double文字的格式說明符。當您編寫1.0時,您是否打算將文字設置爲浮點型還是雙精度型是不明確的。通過編寫1.0f,你告訴Java你打算將文字作爲浮點數,而使用1.0d指定它應該是雙精度浮點數。還有L,代表長(例如,1Llong 1,而不是一個int 1)

+1

澄清:對於javac而言,它並不含糊,只有潛在的經驗較少的程序員。 JLS說沒有後綴的`1.0`是雙倍的。 – 2015-02-23 10:18:01

0

正如其他有提到他們是類型定義,但是你不太可能看到我或d提到,因爲這些是默認值。

float myfloat = 0.5; 

將誤差作爲0.5是雙爲默認,則無法從雙autobox向下浮動(64 - > 32位),但

double mydouble = 0.5; 

不會有任何問題

+0

*「autobox」*是您描述內容的錯誤術語。你的意思是與促銷相反,這將是降級,但沒有(自動)規則。 – Tom 2016-10-22 13:06:13

相關問題