![](/img/trans.png)
[英]Is there any difference between Long a = Long.valueOf(1) or Long a = 1L?
[英]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.