学习笔记 - Java 数组
数组的概述
数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组是有序排列的,且数组属于引用数据类型,但数组中的元素既可以是基本数据类型,又可以是引用数据类型。
数组的存储是在内存中开启一片连续的空间,长度一旦确定就不能修改。
一维数组的使用
声明和初始化
int[] ids; //声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001, 1002, 1003, 1004};
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5]; //定义长度
int[] arr = {1, 2, 3, 4}; //也是正确的,类型推断
数组的默认初始化值
-
基本数据类型:
-
整型:0
-
浮点型:0.0
-
char 型:0 或 '\u0000' ,而非 '0'
-
boolean 型:false (在内存中也为 0 )
-
-
引用数据类型:
- String 型:null ,非 'null'
数组的内存
数组是一种引用内存,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。
实际的数组对象(即数组元素)被存放在堆内存(heap)中,数组的引用变量(即数组对象)被存储在栈内存中。

数组对象如果重新赋值,那么数组对象重新指向新的实际数组的地址值。数去引用的旧数组变成垃圾,等待垃圾回收机制回收。具体分析如下图:

多维数组的使用
声明和初始化
以二维数组为例:
//静态初始化
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
//动态初始化
String[][] arr2 = new String[3][2];
String[][] arr2 = new String[3][]; //列可空,但行不可空
int[][] arr1 = {{1, 2, 3}, {4, 5}, {6, 7, 8}}; //类型推断
二维数组直接使用 lenth 属性时得到的是行数,对某一行使用 lenth 属性时得到的是元素个数(即长度)。
二维数组未初始化时,输出二维数组得到的是内存地址,输出外层元素时也为内存地址,输出内层元素时为 0 。
二维数组的内存结构
Arrays 工具类的使用
在 java.util.Arrays 类中包含操作数组的各种方法。
参考
深入浅出Java数组及其内存机制_Duktig丶的博客-CSDN博客