数组即同类型数据的有序集合。数组在 JAVA 中是引用数据类型,引用数据类型值都存储在堆中。数组定义后长度不可变。

声明一个数组就是在堆内存中开辟一块连续地址的内存空间,变量名指向的就是数组连续空间的首地址,通过首地址可以遍历数组所有元素。初始化一个整形数组:

int[] arr = new int[]{1, 2, 3, 4, 5};

内存存储:




Java 空数组有长度吗 java空数组怎么表示_Java 空数组有长度吗


一、创建数组

Java 中创建数组有多种方式:

type[] arrayName; // 推荐使用方式type arrayName[];

如下:

int[] arr1; // 声明一个整型数组String arr2[]; // 声明一个字符串数组

因为数组是引用数据类型,堆中并未创建数组对象值,所以这里声明的数组只是在栈中声明了一个变量,没有指向数组实际值,不能参与初始化以外的操作。

数组声明并初始化方式:

type[] arrayName = new type[num]; // num 数组存储数据个数type[] arrayName = new type[]{v1, v2, v3}; // 声明并赋值type[] arrayName = {v1, v2, ...}; // 简写方式,直接初始化对应值,数组大小就是初始值个数

编译器会给未初始化数组的所有元素设置默认值。整型数组默认值为 0,布尔型数组默认值为 false,字符型数组默认值为空字符 '',对象数组默认值为 null,字符串属于对象默认也是 null。

注意因为数组的长度不可变,当进行超出数组长度限制的操作时会报错:ArrayIndexOutOfBoundsException。声明并初始化数组:

int[] arr1 = new int[10]; // 初始化一个长度为 10 的数组String[] arr2 = new String[2]; // 初始化一个长度为 2 的字符串数组char[] arr3 = new char[]{'a', 'b', 'c'}; // 初始化并赋值一个长度为 3 的数组char[] arr4 = {'a', 'b', 'c'}; // 简写方式,数组的大小就是初始值的个数

因为数组是引用数据类型,传参时实际传的是数组的引用,对数组的操作都会映射到实际值上。如下:


Java 空数组有长度吗 java空数组怎么表示_数组可以赋值给string_02


二、多维数组

本质上并没有所谓的多维数组,只不过是一维数组的每个元素值也是数组类型,所以看起来就像多维数组。这种嵌套可以一直下去到 n 维数组,逻辑上维度没有限制,但 JVM 规范将维度的数量限制在 255,超出报错。声明并初始化多维数组:

int[][] arr1 = new int[2][3]; // 初始化一个 2 维整型数组,默认值为 0String[][][] arr2 = new String[2][3][2]; // 初始化一个 3 维字符串数组,默认值为 nullint[][] arr3 = {{1, 2}, {3, 4}, {5, 6}}; // 初始化并赋值一个 2 维整型数组System.out.println(Arrays.deepToString(arr1));System.out.println(Arrays.deepToString(arr2));System.out.println(Arrays.deepToString(arr3));

打印值:


Java 空数组有长度吗 java空数组怎么表示_字符数组默认初始值_03


三、数组常用操作

1.数组遍历

public static void main(String[] args) { int[] arr = new int[3]; for (int i = 0; i < arr.length; i++) { arr[i] = i + 1; } System.out.println(Arrays.toString(arr)); // 输出 [1, 2, 3]}

如果不需要使用数组小标的化可以使用简化语法:for each,格式为:

for (type item : arrName) { ... // 操作}

如:

public static void main(String[] args) { String[] arr = new String[]{"hello