像整数数组这样的原始数据类型如何具有字段“长度”?

时间:2012-05-19 13:20:49

标签: java arrays

当原始数据类型不是类时,整数数组类型如何具有字段'length'?例如

int a[] = {1,2,3,4};
int j = a.length;
System.out.println(j);

3 个答案:

答案 0 :(得分:8)

简单:数组不是原语。相反,它们是引用类型的对象。

另一种体验方法是看看如果将int数组传递给方法并从方法中修改数组的内容会发生什么。您将看到这将修改原始数组对象,就像引用类型的所有变量(非原始数据)一样。

答案 1 :(得分:3)

  

如果原始数据类型不是类,那么整数数组类型如何具有字段'length'?

其他答案解释说,数组不是Java中的原始数据类型。

虽然数组类型未声明为类,但它在很多方面喜欢类。例如:

  • 每个数组类型都有java.lang.Object作为其隐式超类
  • 数组实例由引用表示,并且可以(在大多数情况下)保持状态,
  • 数组类型有方法;即Object
  • 声明的方法
  • 您可以在数组实例上调用getClass()以获取其Class对象。

如果你考虑这些,那么一个数组在某种程度上保持数组大小的状态在语义上是不一致的。


Java语言设计者决定将数组的长度建模为名为length的只读字段,其类型为int。这就是它的样子(根据语言语法),这就是它的行为方式。

“长度”字段的“不同性”仅在实施级别上显而易见:

  • length字段表示在数组对象的对象标头中,
  • 有一个特殊的字节码用于访问数组对象的长度(ARRAYLENGTH - 字节码190)

答案 2 :(得分:0)

数组是引用类型的对象,而不是基元。