【问题标题】:java primitive type array object or not?java原始类型数组对象与否?
【发布时间】:2015-12-09 05:01:33
【问题描述】:

考虑以下程序:

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

在 JLS 中,我们读到 java 中的对象是类或数组的实例。 但是,我们在这里看到原始类型的数组。所以,int[2] 也是一个对象。但是,它是如何实现的呢?就像int=>Integer,或int[]=>Integer[] 或 别的东西?顺便说一句,它在哪里?在堆中还是在堆栈中?

【问题讨论】:

  • 某物的数组与某物完全不同。也就是说,int 数组与 int 不同。

标签: java arrays


【解决方案1】:

在 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 类型的字段或参数。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2020-12-19
  • 1970-01-01
  • 2012-07-11
  • 2011-09-04
相关资源
最近更新 更多