Java int[]和Integer[]数组-有什么区别?

Java int[]和Integer[]数组-有什么区别?,java,arrays,integer,int,Java,Arrays,Integer,Int,考虑到以下基本因素: 任何对象仅存在于堆上 数组是一个对象和 IntegerIS-AObject 我发现自己很难回答这样一个简单的问题:JVM内部的int[]和Integer[]之间有什么区别吗?或者它只有在“编译时”才有意义?在运行时会有所不同 int[]是原始int值的数组整数[]是一个“对象”数组,包含对整数对象的引用 最重要的实际区别是:int[]不能保存null值 但我仍然感到困惑:int[]是否只存储一个原始值?如果是的话——这难道不意味着原语类型可以在堆上生存而不被包装吗 int[

考虑到以下基本因素:

  • 任何
    对象
    仅存在于堆上
  • 数组是一个
    对象
  • Integer
    IS-A
    Object

  • 我发现自己很难回答这样一个简单的问题:JVM内部的
    int[]
    Integer[]
    之间有什么区别吗?或者它只有在“编译时”才有意义?

    在运行时会有所不同

    int[]
    是原始int值的数组<代码>整数[]是一个“对象”数组,包含对整数对象的引用

    最重要的实际区别是:
    int[]
    不能保存
    null

    但我仍然感到困惑:
    int[]
    是否只存储一个原始值?如果是的话——这难道不意味着原语类型可以在堆上生存而不被包装吗

    int[]
    不存储基元类型。而数组本身就存在于堆上。但是,这些原语是作为数组的一部分分配的。它们不会单独存储在堆的其他位置。这与基本字段是对象实例的一部分的方式非常相似:对象位于堆上,其字段是该对象的一个组成部分(而对于非基本字段,只有引用存储在对象内部,引用指向的目标实例单独存储在堆上)

    您可以说
    int
    被“包装”在数组中。

    首先,它是一个类/对象,而它是一个基本类型。整型是整型的。如果需要存储空值或需要使用整型,请使用整型。你能行-

    List<Integer> integerList = new ArrayList<Integer>();
    
    List integerList=new ArrayList();
    
    因此,基元类型数组不同于整数对象数组。

    • 整数[]是对象的数组(对象)
    • int[]是一个数组(对象) 原语

    整数和整数之间存在差异。

    此图像应帮助您了解差异:

    是一个数字,它是一个基本类型
    是一个物体

    当您有一个
    Integer
    s数组时,实际上您有一个对象数组。
    int
    s数组是一个基元类型数组

    因为数组是对象,所以它们是在堆上分配的。如果它是一个
    int
    s的数组,那么这些
    int
    s也将被分配到堆中的数组中


    您可能会发现有帮助。

    您也可以将null分配给数组,而不管它存储的类型是什么,数组本身可以为null。但不是基元类型数组中的元素。@Thilo,非常感谢您的回答。但我仍然感到困惑:int[]是否只存储一个基本值?如果是的话——这难道不意味着原语类型可以在堆上生存而不被包装吗?