我發現這裏「public static final long USER_ACCOUNT = 32L」是什麼意思? L意味着什麼後綴長變量?
public static final long USER_ACCOUNT = 32L;
代碼片段是什麼意思32L
這裏?這是否意味着只有一個long
變量具有數值32
或者它意味着長需要32位值?
以及如果我不提供後者L
數字結尾32
?
我發現這裏「public static final long USER_ACCOUNT = 32L」是什麼意思? L意味着什麼後綴長變量?
public static final long USER_ACCOUNT = 32L;
代碼片段是什麼意思32L
這裏?這是否意味着只有一個long
變量具有數值32
或者它意味着長需要32位值?
以及如果我不提供後者L
數字結尾32
?
在Java中編寫長文字時需要「L」後綴。 (你可以使用小寫「l」,但這很容易誤讀爲一個)。長常量被存儲爲64位的二進制補碼值。如果沒有「L」,它將是一個int文字;但在這種情況下,它會得到相同的結果。
這裏是一個鏈接[http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html]到Oracle Java文檔中的一個簡短頁面,擴展了這篇文章。頁面的第一部分討論Java數據類型以及每種類型佔用多少內存,頁面的下一部分將討論如何爲每種不同的數據類型編寫Java文字。
爲您解釋提示您 –
如果我不提供後者L,該怎麼辦?它會影響嗎? –
@GirdharSinghRathore不在這種情況下。如果常量太大而不適合int,則需要明確指定'L'後綴。 –
確定感謝您的解釋 –
讓我們明確這一點:
32
是int
類型的integal不變。32L
是類型long
的整數常量。爲什麼區分這兩種類型很重要?下面是規則:
的int
數必須不超過int
的範圍內,這是從-2147483648到2147483647包容性。此範圍之外的值會觸發編譯錯誤,例如4123456789
。
A long
常數不得超過範圍long
,這是一個更大的範圍。
當long
常量被分配給long
變量時,它很簡單,沒有什麼特別的事情發生。例如:long val = 32L;
當int
常數被分配給一個long
變量,則int
值被轉換爲一個long
值由Java整數轉換規則 - 這意味着從32位是簽名的擴展爲64位。在這種情況下,(long)32
與32L
完全相同,因此long val = 32;
也會做同樣的事情。
然而,某些情況下,都是騙人的:在int
常數0xFFFFFFFF
是不平等到long
不斷0xFFFFFFFFL
。這是因爲由於符號擴展,將0xFFFFFFFF
轉換爲long
給出0xFFFFFFFFFFFFFFFFL
。
* 32L是long類型的整型常量。 – TheLostMind
這意味着USER_ACCOUNT是一個常量,並且每個其他類都可以訪問並且無法更改。 32L顯示該變量是一個長整型值。它代表的值不是32位 –
'final'修飾符很重要。 'public static final'使得原始字符串(或字符串)成爲一個編譯時常量*,並將字段的值傳遞給字節碼本身。如果您使用'javap -v classname'查看字節代碼,您將理解確切的區別 – TheLostMind