考虑以下计划:
int[] arr= new int[2];
.....
System.out.println(arr.length);
在JLS中,我们读到java中的对象是类或数组的实例。
但是,我们在这里看到原始类型的数组。所以,int[2]
也是一个对象。但是,它是如何实现的?它有点int=>Integer
或int[]=>Integer[]
或
别的什么?顺便说一句,它居住的地方?在堆中还是堆栈中?
答案 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
类型的字段或参数。