java - 为什么使用 Long.valueOf(...) 而不是长文字?

标签 java

最近我偶然发现了人们编写类似代码的代码

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

bytecode 输出
  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/

相关文章:

java - Scala 和 Eclipse : Export as Jar File, 但找不到 main 方法

Java:来自同一 HTTPClient 的多个 HTTP 请求?

Java:避免写入和读取文件

java - ArrayList 的标准偏差

JavaServlet : Unable to create Excel File

java - 为什么java if语句以分号结尾时会失败

java - 有没有办法识别 Java 方法中使用的变量?

java - 如果一个域下有多个 DC,如何连接到每个域 Controller 并读取 LDAP 证书结束日期?

java - 错误 : Could not find or load main class <<< Why do I get this error?

java.lang.ClassNotFoundException : con. mysql.jdbc.Driver 1