對不起,這對初學者提出問題!我正在學習Java,對某個主題我有點困惑。爲Java Primitive Data Types提供後綴的目的是什麼?
例如,我聲明和初始化變量作爲浮動,如:
float myVariable = 9.5;
在一些在線教程,我看到被宣佈花車和initalized這樣,但也帶有後綴,如本:
float myVariable = 9.5F;
如果我已經說過「float myVariable」,那麼後綴的用途是什麼?
謝謝!
對不起,這對初學者提出問題!我正在學習Java,對某個主題我有點困惑。爲Java Primitive Data Types提供後綴的目的是什麼?
例如,我聲明和初始化變量作爲浮動,如:
float myVariable = 9.5;
在一些在線教程,我看到被宣佈花車和initalized這樣,但也帶有後綴,如本:
float myVariable = 9.5F;
如果我已經說過「float myVariable」,那麼後綴的用途是什麼?
謝謝!
Java使用後綴與這些原語類型,這裏是一個簡短的介紹:
浮動
float fVariable = 5.5
是默認雙,而float fVariable = 5.5f
使得浮
長
long lVariable = 55
這裏的文字55是默認的int類型,但是long lVariable = 55l
使它變長。
雙
double dVariable = 5.5
和double dVariable = 5.5d
是相似的,但這裏d後綴是可選的
浮點文字默認爲double
類型。所以,9.5
是double不是float。爲了使它浮動,我們在末尾附加一個f
。
因此,在第一種情況:
float myVariable = 9.5;
您試圖分配double類型的文字爲float類型的變量,這需要一個明確的類型轉換。該聲明不會編譯。您需要添加一個鑄有:
float myVariable = (float) 9.5;
而在第二種情況:
float myVariable = 9.5F;
沒有轉換。
感謝您的澄清。所以「float myVariable = 9.5;」與「double myVariable = 9.5;」是一樣的嗎? (因爲兩者都是雙值)。 – Jacob
'float myVariable = 9.5;'不會執行縮小的轉換 - 它將無法編譯,因爲您試圖將一個double值分配給一個float。 (例如,如果您的'myVariable + = 9.5',則會發生縮小的轉換) –
@ user2521738。不,它們本質上不一樣。兩種情況下'myVariable'的類型都不相同。 –
你試過編譯你的代碼嗎?
這不會編譯,因爲默認情況下,所有的浮點文字是doubles
float myVariable = 9.5;
您可以使用顯式類型轉換操作
float myVariable = (float) 9.5;
但它太冗長,所以幸好「F」後綴被引入:
float myVariable = 9.5F;
順便提一下,UPPER('F')和lower(' 'f')個案被允許。
大寫字母'F'通常是首選,如果僅用於與'L'後綴長對稱。'l'後綴看起來太像'1'是實用的。 –
認爲這可能是值得提供援引規範的答案。從§3.10.2 Floating-Point Literals:
甲浮點文字的類型爲float如果它與 ASCII字母F或f爲後綴;否則其類型是雙...
換言之,9.5
和9.5f
是兩個不同的文字具有不同類型。
9.5
是double
類型的,並且不能被分配到一個float
而不 明確的鑄造9.5f
是float
型的(並且因此顯然可以 分配給float
類型的變量)
在「float fVariable = 100」中,100默認爲一個整數,因此,爲了使「float fVariable = 100」爲浮點數,我需要做「float fVariable = 100f」嗎? – Jacob
literal 100是int,它像一個浮點型變量(float fVariable = 100),fVariable的值是float(即100.0),但是直到int max值(即2147483647),所以如果你嘗試float fVariable = 2147483648或更大,你必須追加l或L或它不會編譯 – Kalher
@ user2521738編號'float x = 100;'是允許的,因爲'100'是'int'類型和[擴展轉換](http://docs.oracle.com/javase/) specs/jls/se7/html/jls-5.html#jls-5.1.2)自動執行。 – DannyMo