【问题标题】:Why are ints allowing in Java ArrayLists?为什么在 Java ArrayLists 中允许整数?
【发布时间】:2020-04-28 12:29:32
【问题描述】:
import java.util.ArrayList;
import java.lang.Math;
class Main {
  public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add((int) (Math.random() * 100 + 1));
    list.add((int) (Math.random() * 100 + 1));
    list.add((int) (Math.random() * 100 + 1));
    System.out.print (list);
  }
}

只是想知道为什么会这样?我的理解是 ArrayLists 不应该接受像整数这样的原语,但这显然有效并且不会显示任何错误?

【问题讨论】:

标签: java types integer


【解决方案1】:

解释是 int 值由于自动装箱而被自动装箱到 Integer 对象中。这已经在 cmets 中得到解决,但这里有一个来自 Java Language Spec 关于自动装箱的相关片段:

在运行时,装箱转换过程如下:

如果 p 是 int 类型的值,则装箱转换将 p 转换为类和 Integer 类型的引用 r,使得 r.intValue() == p

还有这个:

理想情况下,装箱原始值将始终产生相同的引用。在实践中,使用现有的实现技术这可能是不可行的。上面的规则是一个务实的妥协,要求某些共同的价值观总是被装进无法区分的对象中。实现可能会懒惰地或急切地缓存这些。对于其他值,该规则不允许程序员对装箱值的身份进行任何假设。这允许(但不要求)共享部分或全部这些引用。请注意,long 类型的整数文字是允许但不是必须共享的。

【讨论】:

  • 感谢非常详细的解释!
猜你喜欢
  • 2010-10-09
  • 1970-01-01
  • 2011-08-17
  • 2011-06-04
  • 1970-01-01
  • 2014-12-02
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多