Java语言数组
Java语言数组教程
Java 语言 的数组是一个由固定长度的特定类型元素组成的集合。它们的数据类型必须相同,声明变量的时候,必须要指定参数类型。
Java语言数组定义
语法
数据类型 数组名[] = null; //声明一个一维数组
数组名 = new 数据类型[长度];//给数组分配内存
参数
参数 | 描述 |
数据类型 | 数据类型是指定数组里面的数据元素的类型,每个元素都要和这个类型一样。 常见类型有:整形,浮点型和字符型。 |
数组名 | 用来统一的表现这一组数据的元素的名称 |
长度 | 表示数组可以存放多少个元素,也告诉编译器,内存需要分配多少的内存空间给该数组 |
说明
数组的定义分为两步,第一步是声明一个数组,第二步是分配内存。我们可以看到第一步在声明数组的时候,给它赋值 null。这是因为数组和我们前面讲到的数据类型不一样,它是一个引用类型数据,用 null 表示不指向任何内存空间。
虽然我们在语法里面分为两句写,在平时项目实践中,我们会看到
数据类型 数组名[] = new 数据类型[长度];
这样的定义方式。它的长度是固定的,数据类型是一样的。
案例
package com.haicoder.net.array;
public class ArrayTest {
public static void main(String[] args) {
int[] scores = null; //定义一个数组
scores = new int[3]; //为每个数组分配内存空间
}
}
我们定义了一个数组,我们可以理解的场景为,它是存放 3 个成绩。
小结
这节我们看到和定义一般的普通变量不一样,定义一个数组还需要给数组分配内存,需要知道我们有多少数据,这样才能够合理的设计数组,不会浪费内存空间。
Java语言数组结构
Java语言数组结构教程
在 Java 语言 中,虚拟机的内存空间分为堆内存空间和栈内存空间。Java 的数组就需要用到这两个空间,我们定义的数组的名字,它是保存在 Java 栈上面,然后记录的数据指向堆里面具体数据的地址。
Java语言数组结构详解
堆栈内存解释
数组的操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间的数组是永远没有办法被使用的,必须有指向的堆堆内存数组才可以被使用,要开辟新的堆内存,需要使用 new 关键字。然后就可以将此堆堆使用权交给栈。一个堆内存空间可以被多个栈内存空间同时指向。
生活中的场景就是一个人,它可以有多个名字,而名字我们可以理解为栈,而人就相当于一个堆。
数组堆栈
我们以一个代码为例子:
package com.haicoder.net.array;
public class ArrayTest {
public static void main(String[] args) {
int[] scores = null; //定义一个数组
scores = new int[3]; //为每个数组分配内存空间
}
}
具体的内存分配图如下:
我们可以看到,scores
这个名词指向了堆里面的一块内存空间,它被分了三个连续的空间,里面的值都是 0 ,因为我们定义了 int 类型的数组,并且给它分配了空间,而 int 类型的默认值是 0 ,所以我们刚初始化的时候,数组就是这样的分配模型。
在后面对数组进行操作的时候,其实是对堆里面的数据进行操作。
Java语言数组总结
和普通类型不一样,数组类型是引用类型,它的名字存放在栈中,具体的数据,存放在堆中。
因为堆是可以被栈里面多个名字指向的,所以我们在实际工作中如果发现自己的数组值不是自己期望的数据,可以看下是不是被别的地方引用给修改了。