java原始类型数组对象与否?

时间:2015-09-12 21:02:52

标签: java arrays

考虑以下计划:

int[] arr= new int[2];
.....
System.out.println(arr.length);

在JLS中,我们读到java中的对象是类或数组的实例。 但是,我们在这里看到原始类型的数组。所以,int[2]也是一个对象。但是,它是如何实现的?它有点int=>Integerint[]=>Integer[]或 别的什么?顺便说一句,它居住的地方?在堆中还是堆栈中?

1 个答案:

答案 0 :(得分:3)

在Java中,您只有对象的原语或引用。*

int[] arr = { 1, 2 };
int i = arr[0];
assert arr instanceof Object; // true

arr是对以int为元素的数组的引用。

  

如何实现?

int[]拥有自己的班级int[].class,而您的arr是该班级的实例。

  

有点像int => Integer,还是int [] => Integer []还是别的什么?

Integer根本不相关。要将int[]转换为Integer[],您必须创建一个新数组并逐个复制每个元素。

  

顺便说一下,它居住在哪里?在堆中还是堆栈中?

您可以假设所有对象都在堆上。 Java 8可以使用Escape Analysis在堆栈上放置一些对象,但我不相信它可以为数组类型执行此操作。

*唯一的其他类型是void,既不是原始类型也不是引用。它有一个包装器Void,但您不能拥有void类型的字段或参数。