数组如何成为Java中的对象?

问题描述 投票:-3回答:3

我们知道数组是对象,那么创建数组对象背后的类是什么。

当我们写一个语句时,int a [] = new int [56];

这里int是一个原语,它不能是用于定义数组对象的类,

Object可以是数组对象的超类,但它不能是直接类,因为它不包含长度字段。所以请帮助我理解这个事实。

java
3个回答
1
投票

数组是用Java本身构建的,你找不到像它一样的类,例如qazxsw poi。

数组是java中的对象,这是真的。

当我们写一个语句时,int a [] = new int [56];

这里int是一个原语,它不能是用于定义数组对象的类......

String确实表示原始类型值,但对象(数组)不是int类型,它只包含int类型的元素。

如果我们说arr是一个对象,你能告诉我arr.length是如何工作的吗?

数组是正如我们已经说过的对象,长度是每个数组实例包含的FIELD / ATTRIBUTE,该字段是final,并且在实例化数组后创建:

int [] arrayOfInts = new int [23];

正如您在上面所看到的,我们为int的大小指定23,并且在创建数组时将该大小分配给int[]字段,我们已经说过它是最终的,因此无法重新分配,我们只能创建新的数组而不是调整当前的大小。

希望我清除你的一些困惑。


1
投票

length

[...]类实例或数组。

“对象可以是数组对象的超类” - 这不太正确。数组没有显式类,因此另一个类不能扩展数组。数组的元素类型是独立的,可以是基元或对象。

至于数组的JLS §4.3.1 defines an object as如何工作的问题,length

[...]

数组创建表达式指定至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。数组的长度可用作JLS defines it in §10.3实例变量final

[...]


0
投票

用不太技术性的术语来说,数组是一种特殊的对象。它不是标准库中定义的显式命名类,如lengthMap。它更像是Java本身内置的东西。它有自己的特殊声明语法,但它的行为与所有其他对象一样。

基本上,对于定义的每个基本类型或类,Java隐式定义了一个直接扩展String的相应array类。它提供了一种用于创建和访问数组的特殊语法,但除此之外,它是一个普通的对象,具有来自Object的字段和重写方法,尽管这些方法并没有真正实现为做任何有用的事情。

© www.soinside.com 2019 - 2024. All rights reserved.