数组 (Java 入门笔记)
相比之前的随笔, 之后我不会在例题写在笔记里了, 然后把练习作为对笔记的运用单独放在另一篇文章里 (跳转连接附于文末).
于是相比之前, 这篇随笔更精简了.
数组是一种容器, 可以用来存储同种数据类型的多个值.
需注意隐式转换.
建议: 容器类型与存储的数据类型一致.
隐式转换补充:
- byte → short → int → long → float → double
- char → int → long → float → double
定义
第一种 (主流):
数据类型 [] 数组名
int[] array
第二种:
数据类型 数组名 []
int array []
初始化
静态初始化
指定数组元素, 系统根据元素个数计算出数组长度.
使用情景: 已知要操作的具体数据.
简写形式:
数据类型[] 数组名 = {元素};
int[] array = {1, 2, 3};
完整形式:
数据类型[] 数组名 = new 数据类型[]{元素};
int[] array = new int[]{1, 2, 3};
动态初始化
只指定数组长度, 由系统为数组分配初始化值.
使用情景: 只明确数据个数, 但不知道具体的值.
数组类型[] 数组名 = new 数组类型[数组长度];
int[] array = new int [3];
在这之后可以用 arr[0] = 某个值 把值放进去.
默认初始化值
| 整形 | 浮点 | 字符 | boolean | 引用数据* | |
|---|---|---|---|---|---|
| 默认初始化值 | 0 |
0.0 |
\u0000 (空格) |
false |
null |
元素访问
当你直接打印 array 时, 输出的是数组的地址值 (数组在内存中的位置).
获取数组中的元素
数组名[下标索引]
用法: 可以赋值给一个变量, 也可以直接使用.
如:
int[] arr = new int[]{11, 22, 33};
int a = arr[0];//下标索引 0.
int b = arr[1];//下标索引 1.
//复制给一个变量:
System.out.println(a + " " + b);//输出: 11 22
//直接使用:
System.out.println(arr[0]);//输出: 11
把值/变量存储到数组中
数组名[下标索引] = 数值或变量
如:
arr[0] = 164;
arr[1] = num;
覆盖之后, 原来的值就会消失.
数组遍历
将数组的所有内容取出来
length
表示数组长度的一个属性
用法: 数组名.length.
常规遍历
常规 for 循环.
int arr[] = {1, 2 ,3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//i 表示数组里的每一个下标索引
//arr[i] 表述数组里的每一个元素.
idea 快捷键: 数组名.fori
foreach 遍历
增强 for 循环 (在前一篇文章有涉及到: https://www.cnblogs.com/LinghuSumire/p/19821999#增强-for-循环).
int arr[] = {1, 2, 3};
for (int x : arr) {
System.out.println(x);
}
只读遍历可用, 需要修改组内元素 (初始化, 赋值) 时不可用.
数组常见问题
数组越界
访问了不存在的索引.
如:
int[] arr = {1, 2, 3};
System.out.println(arr[3]);//数组没有下标为 3 的元素
数组内存分配
Java 内存分配
栈: 方法运行时使用的内存.
堆: 存储对象、 数组 (new 创建的).
方法区: 可运行的 class 文件.
本地方法栈: 虚拟机使用操作系统的时候使用.
寄存器: CPU 使用.

数组的内存图
结论:
只要是 new 出来的就是在栈里开了一个空间.
new 了多少次, 栈里就有多少个小空间, 每个小空间里有各自的数据.

两个数组指向一个空间的内存图
public static void main(String[] args) {
int arr1 = {11, 22};
int arr2 = arr1;//没有 new:把 arr1 的地址赋值给arr2.
}
它们共用一块地方.

arr2[0] = 33;
对 arr2 赋值, 直接改变它们共用空间里下标 2 的元素.

结论:
两个数组指向同一个小空间时, 若其中一个数组对这个小空间的值进行改变, 其他数组去访问这个位置得到的就会是改变后的值.

自用笔记。对数组的初始化、元素访问和数组遍历进行简要概括。
浙公网安备 33010602011771号