2016-01-12 68 views
2

我發現這裏「public static final long USER_ACCOUNT = 32L」是什麼意思? L意味着什麼後綴長變量?

public static final long USER_ACCOUNT = 32L; 

代碼片段是什麼意思32L這裏?這是否意味着只有一個long變量具有數值32或者它意味着長需要32位值?

以及如果我不提供後者L數字結尾32

+1

這意味着USER_ACCOUNT是一個常量,並且每個其他類都可以訪問並且無法更改。 32L顯示該變量是一個長整型值。它代表的值不是32位 –

+3

'final'修飾符很重要。 'public static final'使得原始字符串(或字符串)成爲一個編譯時常量*,並將字段的值傳遞給字節碼本身。如果您使用'javap -v classname'查看字節代碼,您將理解確切的區別 – TheLostMind

回答

3

在Java中編寫長文字時需要「L」後綴。 (你可以使用小寫「l」,但這很容易誤讀爲一個)。長常量被存儲爲64位的二進制補碼值。如果沒有「L」,它將是一個int文字;但在這種情況下,它會得到相同的結果。

這裏是一個鏈接[http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html]到Oracle Java文檔中的一個簡短頁面,擴展了這篇文章。頁面的第一部分討論Java數據類型以及每種類型佔用多少內存,頁面的下一部分將討論如何爲每種不同的數據類型編寫Java文字。

+0

爲您解釋提示您 –

2

是的,這是一個很長的常數,(資本L)只是一個後綴。

Java規範允許大寫和小寫後綴,但長文本的大寫版本是首選,因爲大寫L不易與數字1混淆而不是小寫l。

你可以得到更多關於Java規範here的信息。

+0

如果我不提供後者L,該怎麼辦?它會影響嗎? –

+2

@GirdharSinghRathore不在這種情況下。如果常量太大而不適合int,則需要明確指定'L'後綴。 –

+0

確定感謝您的解釋 –

1

讓我們明確這一點:

  • 在Java中,32int類型的integal不變。
  • 32L是類型long的整數常量。

爲什麼區分這兩種類型很重要?下面是規則:

  • int數必須不超過int的範圍內,這是從-2147483648到2147483647包容性。此範圍之外的值會觸發編譯錯誤,例如4123456789

  • A long常數不得超過範圍long,這是一個更大的範圍。

  • long常量被分配給long變量時,它很簡單,沒有什麼特別的事情發生。例如:long val = 32L;

  • int常數被分配給一個long變量,則int值被轉換爲一個long值由Java整數轉換規則 - 這意味着從32位是簽名的擴展爲64位。在這種情況下,(long)3232L完全相同,因此long val = 32;也會做同樣的事情。

  • 然而,某些情況下,都是騙人的:在int常數0xFFFFFFFF不平等long不斷0xFFFFFFFFL。這是因爲由於符號擴展,將0xFFFFFFFF轉換爲long給出0xFFFFFFFFFFFFFFFFL

+0

* 32L是long類型的整型常量。 – TheLostMind

相關問題