最近我偶然发现了人们编写类似代码的代码
Long myLong = Long.valueOf(42);
// instead of
Long myLong = 42L;
我不知道为什么要这样做,除了关于可读性的个人喜好。
我错过了什么吗?
最佳答案
如果将 int
分配给 Long
(int
到原始 long
是隐式)并且他们使用 Long.valueOf
autoboxed
Long myLong1 = Long.valueOf(42);
Long myLong2 = Long.valueOf(42L);
Long myLong3 = 42L;
Long myLong4 = (long) 42;
否则它们都是相同的请参阅 javap
public static void main(java.lang.String[]);
Code:
0: ldc2_w #16 // long 42l
3: invokestatic #18 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
6: astore_1
7: ldc2_w #16 // long 42l
10: invokestatic #18 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
13: astore_2
14: ldc2_w #16 // long 42l
17: invokestatic #18 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
20: astore_3
21: ldc2_w #16 // long 42l
24: invokestatic #18 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
27: astore 4
29: return
但是,如果不是绝对必要,应该避免使用 new Long(42L)
,并且需要使用上述语句之一来支持这一点,因为 valueOf
方法通常会缓存一个JVM 内部的值范围(FlyWeight 设计模式
)
琐事:在整数和 Oracle JVM 的情况下,可以使用 -XX:AutoBoxCacheMax=
关于java - 为什么使用 Long.valueOf(...) 而不是长文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532217/