java数组声明仅创建栈中null引用,初始化才在堆中分配内存;动态初始化用new指定长度并设默认值,静态初始化用大括号赋初值定长度,匿名数组用于即用场景。

Java 数组的声明与初始化不是线性步骤,而是围绕“引用变量”和“实际对象”两个层面展开的技术组合。核心在于理解:声明只是创建一个空引用,初始化才是分配真实内存并赋予初始状态。
数组声明:只定义引用,不占堆内存
声明语句仅在栈中创建一个引用变量,不分配任何数组空间,此时变量值为 null。
-
推荐写法:
int[] nums;—— 类型明确,强调int[]是一种独立类型 -
兼容写法:
int nums[];—— C 风格,不推荐,易与多维数组混淆(如int[] arr1, arr2中只有 arr1 是数组) - 声明后直接访问
nums.length或nums[0]会触发NullPointerException
动态初始化:指定长度,依赖默认值
使用 new 关键字在堆中分配固定大小的连续内存块,所有元素自动设为对应类型的默认值。
-
int[] nums = new int[5];→ 元素全为 0 -
boolean[] flags = new boolean[3];→ 元素全为 false -
String[] names = new String[4];→ 元素全为 null - 长度必须是编译期可确定的非负整数,不能是变量(除非是
final常量)
静态初始化:内容驱动长度,一步到位
由大括号内元素个数决定数组长度,适用于已知全部初始值的场景,语法简洁且不易出错。
-
int[] nums = {1, 2, 3, 4, 5};—— 最简形式,只能用于声明同时初始化 -
int[] nums = new int[]{1, 2, 3};—— 完整形式,可用于方法传参(如Arrays.asList(new Integer[]{1,2})) -
禁止写法:
new int[5]{1,2,3}—— 显式长度与元素个数冲突,编译报错
匿名数组:无名对象,专为即用场景设计
不绑定变量名,生成后立即用于参数传递或临时计算,生命周期短、无引用残留。
printArray(new int[]{10, 20, 30});String.join("-", new String[]{"a", "b", "c"});- 不能后续通过变量访问,也不能重复使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











