java中用var声明数组必须显式初始化且类型可推断,禁止未初始化、多变量声明、多维数组不完整声明及用于字段/参数/返回值。

Java 中用 var 声明数组是允许的,但必须满足几个硬性条件——它不是“想用就用”,而是有明确边界。
必须显式初始化,且右侧能唯一确定数组类型
编译器靠初始化表达式推断类型,所以不能只写 var arr;,也不能写 var arr = null;。数组类型必须从字面量或构造器中清晰体现:
-
var nums = new int[]{1, 2, 3};→ 推断为int[] -
var names = new String[]{"Alice", "Bob"};→ 推断为String[] -
var list = Arrays.asList(1, 2, 3);→ 推断为List<integer></integer>(注意:这不是数组)
像 var arr = new Object[5]; 是合法的,因为右侧明确是 Object[];但 var arr = new int[5]; 同样合法,类型就是 int[]。
不能用于多维数组的“不完整”声明
Java 不支持用 var 声明未完全初始化的多维数组,例如:
-
var matrix = new int[3][];✅ 合法(推断为int[][]) -
var grid = new int[2][3];✅ 合法(推断为int[][]) -
var data; data = new double[4][4];❌ 错误(var必须与初始化在同一语句)
不能和数组变量复合声明混用
var 不支持一条语句声明多个变量,因此以下写法非法:
-
var a = new int[2], b = new int[3];❌ 编译报错 -
var x = 1, y = "hello";❌ 即使类型不同也不行
每个 var 声明必须独立成句,确保类型推断一一对应。
不能用于方法参数、返回值或字段中的数组
var 仅限局部变量,所以这些场景一律禁止:
- 类字段:
var items = new String[10];❌(哪怕在方法外初始化也不行) - 方法参数:
void process(var arr)❌ - 返回类型:
var getArray() { return new long[5]; }❌
数组本身没有特殊豁免——它受制于 var 的全局使用规则。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











