1.内存中的数组
在前面的例子中,插图有点不准确。
创建数组时(与创建字符串时一样),会分配两个单独的内存块:一个用于存储数组(容器)本身,第二个块用于存储其地址的变量。下图代表了这一澄清:

为元素数组分配的内存10 int和int[]存储数组地址的变量以绿色int显示。
int为了比较,存储值的普通变量199显示为蓝色。
这有点让人想起在内存中存储字符串,你不觉得吗?
没错,弦乐。就像使用字符串一样,您可以将数组变量赋值给另一个:
| 代码 | 解释 |
|---|---|
|
创建一个元素数组10 int。将值分配 4给具有索引的单元格2。将值分配 9给具有索引的单元格7。在 b变量中,保存变量存储的地址a。现在 a并b指向内存中的同一个数组对象。在带有索引的数组对象的单元格中,写入存储在单元格(存储值)和(存储值)中的值 9的总和。 2479 |
数组对象保留在原来的位置,并且a和b变量将相同的地址(引用)存储到相同的对象。看图:
2. 有关使用数组的更多详细信息
您可以创建任何类型的元素数组。为此,只需在类型名称后写上方括号即可。通常,创建数组如下所示:
type[] name = new type[number];
其中type是我们将存储在数组中的元素的类型。Name是我们将用来引用数组的变量的名称,number是数组中的单元格数。
上面的示例是创建数组变量和数组对象的规范形式。实际上,这是两个独立的实体。
您可以从数组对象中单独创建一个数组变量:
type[] name;
name = new type[number];
还有一点并非无关紧要:
例子:
| 代码 | 解释 |
|---|---|
|
n创建一个元素数组 |
|
创建一个包含203元素的数组 |
|
|
0..99显示
ArrayIndexOfBoundException,这意味着索引超出了数组的范围。
3.数组长度
正如您在前面的示例中看到的,您可以自己创建一个数组变量,然后在代码中的某处为其赋值(对数组对象的引用)。你甚至可以这样做:
| 代码 | 解释 |
|---|---|
|
创建一个数组变量,其类型为int[]如果 a变量小于10,则创建一个元素数组 10。否则创建一个元素 数组 20 |
现在你还能用这样的数组做什么?你怎么知道里面有多少元素?
为了解决这个问题,数组有一个名为 的特殊属性(变量)length。您可以使用以下表达式找到数组的长度:
array.length;
这array是数组变量的名称,length是数组属性的名称。属性的值length不能改变:length属性本身可以赋值给其他变量,但不能赋值给它(如果你试图这样做,程序将无法编译)。
我们可以像这样继续前面的例子:
| 代码 | 解释 |
|---|---|
|
创建一个数组变量,其类型为int[]如果 a变量小于10,则创建一个元素数组 10。否则 创建一个 20元素数组循环遍历数组的所有元素:从 0到长度array.length - 1 |
4. Java 中关于数组的事实总结
让我们回顾一下我们对数组的了解:
事实 1.数组由许多单元格组成。
事实 2.您可以使用其编号(索引)访问特定单元格。
事实 3.所有细胞都属于同一类型。
事实 4.所有单元格的初始值为 0(如果单元格存储数字)、null(如果单元格存储对象引用)或false(如果单元格存储boolean值)。您将在本章中了解有关默认值的更多信息。
事实 5. String[] list只是一个变量的声明。这不会创建容器(数组对象)本身。要使用变量,首先需要创建一个数组(容器)并将其赋值给变量。请参见下面的示例。
事实 6.当我们创建一个数组对象(容器)时,我们必须指出它有多大,即它包含多少个单元格。这是通过如下语句完成的new TypeName[n]:
事实 7.可以使用 属性找到数组的长度.length。
事实 8.创建数组后,您不能更改其元素的类型或它存储的元素的数量。
| 代码 | 解释 |
|---|---|
|
s是nulllist_null |
|
变量list存储对对象的引用:由10元素组成的字符串数组。n是10 |
|
现在 |
|
会抛出一个异常(程序错误),即程序会崩溃。list存储对的引用null |
|
将产生数组越界异常(程序错误)。 如果 a list存储10元素/单元格,则有效索引为:0 1 2 3 4 5 6 7 8 9—10元素。 |
GO TO FULL VERSION