java如何定义一个数组:三种写法对比
java如何定义一个数组,分为声明后分配空间、声明同时赋值、简化赋值三种写法,数组属于固定长度容器,长度一旦初始化就不能修改,你在JDK8到JDK21版本都可以直接使用,适合存储同类型数据,不适合需要频繁增删元素的业务场景,频繁增删元素优先选用ArrayList。声明语法分为两种格式,一种是类型后跟方括号,推荐项目开发使用,另一种是变量名后跟方括号,仅为兼容旧代码写法,团队编码规范里大多优先前者。数组创建时会在堆内存开辟连续空间,基础类型数组默认填充对应初始值,引用类型数组默认填充null。
java数组的三种定义写法
第一种写法,先声明数组变量,再使用new关键字分配长度,你只需要指定数据类型和数组长度,此时数组内元素为默认值,示例代码int[]arr=newint[5];,这行代码代表创建长度为5的int数组,每个元素默认值是0,后续你可以通过下标单独赋值,下标从0开始,最大下标等于数组长度减一,访问超出范围的下标会抛出ArrayIndexOutOfBoundsException运行时异常。
第二种写法,声明数组的时候直接写入元素,编译器会自动识别数组长度,示例代码int[]arr=newint[]{1,2,3,4};,花括号内部填写你需要存储的元素,元素之间用逗号隔开,这种写法不允许在方括号里手动填写长度,长度由花括号内元素数量决定,适合元素数量提前确定且数值已知的场景。
第三种写法是简写形式,省略new关键字和类型声明,示例代码int[]arr={1,2,3};,该写法只能在数组声明的同一行使用,不能拆分成先声明再赋值,拆开会出现编译报错,它本质上是第二种写法的语法糖,编译之后会转为带new的完整写法,在本地变量定义时使用会精简代码。
| 定义方式 | 语法示例 | 适用场景 | 限制条件 |
|---|---|---|---|
| 指定长度初始化 | int[]arr=newint[6]; | 元素值未知,后续逐个赋值 | 元素取类型默认值 |
| 带new直接赋值 | int[]arr=newint[]{2,4,6}; | 元素已知,可拆分复用 | 方括号不能写长度 |
| 简写初始化 | int[]arr={1,3,5}; | 一行声明并赋值 | 只能紧跟声明语句 |
数组的数据类型必须统一,同一个数组里不能同时存放整数、字符串等不同类型元素,基础类型数组保存原始数值,引用类型数组保存对象地址,String[]就是常见的引用类型数组,数组变量本身只是一个地址引用,存放在栈内存中,实际数据保存在堆内存。
二维数组可以理解为数组里面存放数组,定义格式沿用一维数组的规则,int[][]arr=newint[3][4];代表包含3个一维数组,每个一维数组长度为4,也可以只指定外层长度,内层数组单独创建,int[][]arr=newint[2][];,之后再给arr[0]、arr[1]分别赋值一维数组对象。
数组长度不可变。
你获取数组长度使用数组名.length属性,这是属性不是方法,后面不能加圆括号,和集合的size()方法区分开,遍历数组可以使用普通for循环根据下标读取,也可以使用增强for循环只读取元素,增强for循环无法修改数组下标、不能获取当前下标数值。
如果你写出intarr[5];这类写法,编译器直接提示语法错误,java不支持在变量声明时直接在方括号填写长度,长度只能放在new后面的方括号内,这个错误在新手编码时出现频次较高,修改思路是调整为标准new分配长度或者花括号赋值格式。
