2

当它不是一个类时,像整数数组这样的原始数据类型如何具有字段“长度”?例如

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

3 回答 3

8

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

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

于 2012-05-19T13:21:14.863 回答
3

当它不是一个类时,像整数数组这样的原始数据类型如何具有字段“长度”?

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

虽然数组类型没有声明为类,但它在许多方面都一个类。例如:

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

如果您考虑这些,则数组具有某些包含数组大小的状态在语义上并不是不一致的。


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

“长度”字段的“差异性”仅在实现级别很明显:

  • length字段在数组对象的对象头中表示,并且
  • 有一个特殊的字节码用于访问数组对象的长度(ARRAYLENGTH - 字节码 190)
于 2012-05-19T14:08:55.783 回答
0

数组是引用类型的对象,而不是原语。

于 2012-05-19T13:36:54.180 回答