3 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個贊
L在末尾添加大寫字母:
long value = 9223372036854775807L;
否則,編譯器將嘗試將文字解析為int,因此出現(xiàn)錯誤消息

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊
我不知道為什么它將長數(shù)據(jù)類型稱為int
它不是。您應(yīng)該學(xué)會信任編譯器消息(尤其是當(dāng)它們來自健全,現(xiàn)代的編譯器而不是古老的C / C ++編譯器時)。盡管他們有時說的語言可能很難理解,但他們通常不會對您說謊。
讓我們再來看一看:
int 9223372036854775807的文字超出范圍。
注意,它在任何地方都沒有提及您的變量testLong或類型long,因此它與初始化無關(guān)。該問題似乎在其他時候發(fā)生。
現(xiàn)在讓我們研究消息的某些部分:
int告訴我們他想將某些東西視為一種int價值(這不是您想要的!)
“超出范圍”非常清楚:某些內(nèi)容不在預(yù)期范圍內(nèi)(可能是int)
“文字”:現(xiàn)在很有趣:什么是文字?
我將離開舒適的列表,討論一下文字:文字是在代碼中具有一定價值的地方。有String文字,int文字,class文字等等。每次您在代碼中明確提及一個值時,它都是文字。
因此,它實(shí)際上并不是在困擾您關(guān)于變量聲明,而是數(shù)字本身,值就是在困擾您。
您可以在a long和an int均可接受的上下文中使用相同的文字來輕松地驗(yàn)證這一點(diǎn):
System.out.println(9223372036854775807);
PrintStream.println可以帶一個int或一個long(或幾乎其他任何東西)。這樣的代碼就可以了,對吧?
不會。也許應(yīng)該這樣,但是根據(jù)規(guī)則,這樣做并不好。
問題在于“某些數(shù)字”被定義為int文字,因此必須在定義的范圍內(nèi)int。
如果要編寫long文字,則必須通過附加L(或小寫)使其明確l,但我強(qiáng)烈建議您始終使用大寫形式,因?yàn)樗菀组喿x且更容易被誤認(rèn)為是1。
請注意,float(postfix F/ f)和double(postfix D/ d)也會發(fā)生類似的問題。
旁注:您將意識到?jīng)]有byteor short文字,您仍然可以將值(通常是int文字)分配給byte和short變量:這可能是由于§5.2中有關(guān)Assignment Converson的特殊規(guī)則所致:它們允許分配較大類型的常量表達(dá)式到byte,short,char或int 如果值是類型的范圍內(nèi)。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個贊
long ak = 34778754226788444L/l;
兩者都使用,但一次只能使用大寫L或小寫l。
為什么要使用L / l?因?yàn)閘ong是整數(shù)數(shù)據(jù)類型的一部分。
添加回答
舉報