3 回答

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

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

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