【问题标题】:Java LONG integer typesJava LONG 整数类型
【发布时间】:2011-12-05 04:28:09
【问题描述】:

您是否需要将Long 变量定义为

Long myUserId = 1L;?

你怎么不能只做Long myUserId = 1;

【问题讨论】:

  • 你自己回答了第一个问题。
  • 我猜你可以分配“1”(或任何“int”值的编译时表达式),编译器会进行强制转换来完成分配。
  • @IraBaxter:它会进行加宽转换(从 int 到 long),但之后不会自动装箱。
  • 查看下面的stackoverflow.com/questions/769963/…..它有解释。
  • @Thilo:我错过了“Long”与“long”。

标签: java


【解决方案1】:
Long myUserId = 1;   // error

不起作用,因为1 是一个整数。

它会自动装箱到:

Integer myUserId = 1;   // ok

它也将扩大到:

long myUserId = 1;      // also ok

但不是两者兼而有之。

所以,是的,你不得不说

Long myUserId = 1L;  

这是一个long,可以自动装箱成Long

至于为什么它以这种方式工作(或者在这种情况下不起作用):很可能是因为后来添加了自动装箱(在 Java5 中),并且必须绝对向后兼容。这限制了他们能做到的“顺利”程度。

【讨论】:

    【解决方案2】:

    否则,Java 会将所有数字类型默认为整数。

    甚至允许将“1L”分配给Long(而不是原语long)的唯一原因是Java 5 引入了“自动装箱”。

    没有“1L”,在幕后,这看起来像下面没有“L”:

    Long myUserId = Integer.valueOf(1);
    

    ...我希望这显然可以解释。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多