数组定义和访问
数组的定义
- 格式一:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
- 数组定义格式详解:
- 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
- [] : 表示数组。
- 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
- new:关键字,创建数组使用的关键字。
- 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
- [长度]:数组的长度,表示数组容器中可以存储多少个元素。
- 注意:数组有定长特性,长度一旦指定,不可更改。
- 和水杯道理相同,买了一个 2 升的水杯,总容量就是 2 升,不能多也不能少。
- 举例:
定义可以存储 3 个整数的数组容器,代码如下:
int[] arr = new int[3];
- 格式二:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
- 举例:
定义存储 1,2,3,4,5 整数的数组容器。
int[] arr = new int[]{1,2,3,4,5};
- 格式三:
数据类型[] 数组名 = {元素1,元素2,元素3...};
- 举例:
定义存储 1,2,3,4,5 整数的数组容器
int[] arr = {1,2,3,4,5};
数组的访问
- 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素。
- 格式:
数组名[索引]
- 数组的长度属性: 每个数组都具有长度,而且是固定的,Java 中赋予了数组的一个属性,可以获取到数组的 长度,语句为: 数组名.length ,属性 length 的执行结果是数组的长度,int 类型结果。由次可以推断出,数 组的最大索引值为 数组名.length-1 。
- 索引访问数组中的元素:
- 数组名[索引]=数值,为数组中的元素赋值
- 变量=数组名[索引],获取出数组中的元素
public static void main(String[] args) {
//定义存储int类型数组,赋值元素1,2,3,4,5
int[] arr = {1,2,3,4,5};
//为0索引元素赋值为6
arr[0] = 6;
//获取数组0索引上的元素
int i = arr[0];
System.out.println(i);
//直接输出数组0索引元素
System.out.println(arr[0]);
}
数组原理内存图
Java 虚拟机的内存划分
- JVM 的内存划分:
区域名称 | 作用 |
---|---|
寄存器 | 给 CPU 使用,和我们开发无关。 |
本地方法栈 | JVM 在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的 class 文件。 |
堆内存 | 存储对象或者数组,new 来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如 main 方法运行,进入方法栈中执行。 |
数组在内存中的存储
- 一个数组内存图
public class Demo01ArrayOne {
public static void main(String[] args) {
int[] array = new int[3]; // 动态初始化
System.out.println(array); // 地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("==============");
// 改变数组当中元素的内容
array[1] = 10;
array[2] = 20;
System.out.println(array); // 地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 10
System.out.println(array[2]); // 20
}
}
- 两个数组内存图
public class Demo02ArrayTwo {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
int[] arrayB = new int[3];
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 0
System.out.println(arrayB[2]); // 0
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}
- 两个引用指向一个数组
public class Demo03ArraySame {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
// 将arrayA数组的地址值,赋值给arrayB数组
int[] arrayB = arrayA;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 10
System.out.println(arrayB[2]); // 20
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于