java如何定义数组:三种主流写法
java如何定义数组一共分为声明后分配空间、声明同时赋值、静态简写三种写法,你在JavaSE8到Java21版本都可以正常使用,声明后分配空间适合数组长度提前确定、元素后续逐个填入的业务,声明同时赋值适合初始元素固定、数量不多的场景,静态简写只能紧跟声明语句,不能单独用于已经声明完成的数组变量,数组一旦创建,长度无法修改,只能替换整个数组引用,基础数据类型数组默认填充对应零值,引用类型数组默认填充null。
java定义数组的完整语法形式
数组声明有两种等价的书写位置,方括号写在类型后或者变量名后都能编译通过,推荐把方括号紧跟数据类型,可读性更强。第一种标准写法先定义数组变量,再使用new关键字分配内存,int[]arr;之后写arr=newint[5];,数字5代表数组容量,也就是最多存放5个int元素,分配内存之后,每个下标位置都可以单独赋值,下标从0开始计数,访问下标超出数组长度会抛出数组下标越界异常。
直接在声明语句里完成初始化,会根据大括号内元素数量自动确定数组长度,不需要手动填写长度数值,代码示例为int[]arr=newint[]{12,24,36},大括号里依次填入需要存入的初始元素,这种写法可以拆分到多行,元素末尾允许保留多余逗号,编译器会自动忽略,适合需要把初始值清晰罗列出来的代码片段。
类型后面直接搭配大括号简写是开发里高频使用的方式,int[]arr={1,3,5,7,9},这种写法不能脱离变量声明独立使用,如果你先写int[]arr;,再单独一行写arr={2,4,6},代码无法编译,编译器会判定语法错误,简写本质是前面带new的初始化形式的语法糖,运行阶段生成的数组对象没有区别。
| 写法类型 | 是否可拆分两行 | 长度指定方式 | 适用场景 |
|---|---|---|---|
| 先声明再new | 可以 | 手动填写长度 | 元素延后赋值 |
| new带大括号初始化 | 可以 | 由元素个数决定 | 固定初始值,代码复用灵活 |
| 直接大括号简写 | 不可以 | 由元素个数决定 | 简短变量声明,快速赋值 |
二维数组的底层是数组里面存放数组,定义的时候可以单独指定外层和内层长度,也可以直接传入嵌套的元素集合,int[][]twoArr=newint[3][4],代表外层有三个数组,每个内层数组固定存放四个整数,你也可以不写内层长度,单独给每一行单独分配不同长度的数组,形成不规则二维数组。
基础类型数组初始化后的默认值固定,byte、short、int、long默认是0,float、double默认是0.0,boolean默认是false,char默认是空字符,所有引用类型数组,例如String、自定义类构成的数组,初始化之后全部元素为null,如果你直接读取还没有赋值的元素,程序不会报错,直接读取默认值。
数组变量保存的不是数组本身,是堆内存里数组对象的引用地址,你把一个数组变量赋值给另一个变量,两个变量指向同一块数组,任意一个变量修改数组元素,另一边读取到的数据会同步变化。
数组没有内置扩容方法,如果需要动态增减元素,通常选择ArrayList,它底层封装数组,自动完成扩容拷贝逻辑,适合元素数量波动较大的业务场景。
数组长度固定不变。
