当它不是一个类时,像整数数组这样的原始数据类型如何具有字段“长度”?例如
int a[] = {1,2,3,4};
int j = a.length;
System.out.println(j);
很简单:数组不是原语。相反,它们是引用类型的对象。
另一种体验这一点的方法是查看如果将一个 int 数组传递给一个方法并从该方法中修改该数组的内容会发生什么。您会看到这也会修改原始数组对象,就像所有引用类型(非原始)的变量一样。
当它不是一个类时,像整数数组这样的原始数据类型如何具有字段“长度”?
其他答案解释了数组不是Java中的原始数据类型。
虽然数组类型没有声明为类,但它在许多方面都像一个类。例如:
java.lang.Object
其隐式超类,Object
,和getClass()
一个数组实例来获取它的Class
对象。如果您考虑这些,则数组具有某些包含数组大小的状态在语义上并不是不一致的。
Java 语言设计者决定将数组的长度建模为一个只读字段,称为length
其类型为int
。这就是它的样子(根据语言语法),这就是它的行为方式。
“长度”字段的“差异性”仅在实现级别很明显:
length
字段在数组对象的对象头中表示,并且数组是引用类型的对象,而不是原语。