2017-08-08 64 views
0

爲什麼在Long l = 3而不是Long l = 3L中存在編譯錯誤?將int文字分配給java中的長包裝類

原始數據類型long接受33l。我明白3是一個int文字 - 但它不能被分配給一個Long包裝對象? int只有32位不應該適合64位整數類型?

回答

4

因爲沒有一個intLong加寬自動裝箱轉換,自動裝箱將從longLong(但第一值必須是加寬intlong)。你可以做3L你有,或

Long l = Long.valueOf(3); 

Long l = (long) 3; 
+0

好的,但你能好心解釋我爲什麼原始數據類型長期接受3? – ashley

+1

@ashley [JLS-5.1.2。擴展原始轉換](https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2)列舉** 19 **擴展轉換,其中包括「int長,浮,或雙「 –

+0

謝謝你將參考文檔 – ashley

0

有關其他答案:

3L是等於(long)3 - >其解析到3L,因爲它是一個長期的文字

3是整數文字

3L是一個長期的字面

概括地說,他們是彼此不同的,這就是爲什麼你需要解析INT長,反之亦然。