簡體   English   中英

Java中Long.valueOf(0)和0L的區別是什么?

[英]Which is the difference between Long.valueOf(0) and 0L in Java?

我想知道使用Long.valueOf(0);之間的區別Long.valueOf(0); 0L 它們是一樣的嗎?

據我所知,兩者都是Long類型,所以它們在Java 8中的內存消耗為64位。

那么考慮內存消耗和時間復雜度,如何更好地初始化變量呢?

Long a = Long.valueOf(0);

要么

Long b = 0L;

沒有。

Long b = 0L;

將進行自動裝箱 編譯器將其替換為:

Long b = Long.valueOf(0L);

如果您反編譯您的類,您可以看到這一點,例如使用javap

void a() {
  Long a = Long.valueOf(0);
}

void b() {
  Long b = 0L;
}

反編譯為:

  void a();
    Code:
       0: lconst_0
       1: invokestatic  #2                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       4: astore_1
       5: return

  void b();
    Code:
       0: lconst_0
       1: invokestatic  #2                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       4: astore_1
       5: return

那么考慮內存消耗和時間復雜度,如何更好地初始化變量呢?

因為它們在語義上是相同的,所以內存消耗和時間復雜度也是相同的。

相反,要關注實際上重要的東西,即可讀性 :使用你(和其他人)最容易理解的那一個。

正如其他人所指出的, Long l = Long.valueOf(0)Long l = 0L將編譯為相同的字節碼,唯一的區別是樣式和可讀性。

另外..

擔心這樣的事情的時間復雜性有點傻:兩個表達都是恆定的時間。 在處理數據集合時, 通常只討論時間復雜度,而不僅僅是單個數據。

至於內存消耗,它們不像你說的那樣使用64位; 它是原始的long類型,通常使用64位但Long (包裝類型)使用的內存比原始類型多,因為它需要內存用於與對象相關的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM