【问题标题】:Why is implicit conversion from int to Long not possible?为什么从 int 到 Long 的隐式转换是不可能的?
【发布时间】:2015-01-11 23:35:21
【问题描述】:

我可以隐式地将 int 转换为 long 并将 long 转换为 Long。为什么不能将 int 隐式转换为 Long?为什么Java不能在例子的最后一行做隐式转换?

int i = 10; //OK
long primitiveLong = i;  //OK
Long boxedLong = primitiveLong;  //OK
boxedLong = i; //Type mismatch: cannot convert from int to Long

【问题讨论】:

  • 这是因为自动装箱从它的Object 到它的原始类型是一对一的关系。
  • 可能没有真正的原因,只是语言设计者决定不支持它。你可以让它与boxedLong = (long)i一起工作。

标签: java


【解决方案1】:

LongInteger 是对象。装箱/拆箱仅适用于原语。 做Long boxedLong = i 就像Long boxedLong = new Integer(10),那是不行的! 另外,请记住LongInteger 之间没有继承关系,所以即使Integer i = new Long() 也是无效的

【讨论】:

  • @CachoSanta 在这种情况下,对象隐含地表示类;)。
【解决方案2】:

装箱仅适用于基元。这就是为什么。

试试这个:Long.valueOf(int);

Documentation

【讨论】:

    【解决方案3】:

    在这种情况下,我看到的 long 和 Long 之间的最大区别是 Long 可能为空。如果您有可能缺少值,Long 对象将很有帮助,因为 null 可以指示缺失值。如果您使用原语,则必须使用一些特殊值来指示缺失,这可能会很混乱。除非您计划制作一百万个这样的数组然后序列化,否则速度或大小不太可能成为问题。 (When to use Long vs long in java?)

    事实上,没有实际的理由。除了int 是原语,long 是原语,而Long 不是。

    我建议你使用Long.valueOf()

    像这样:

    Long longValue = Long.valueOf(InsertIntHere);
    

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多