java如何声明数组:三种写法对比
java如何声明数组分为先声明后分配内存、声明同时分配内存、直接初始化赋值三种写法,语法分为数据类型[]数组名和数据类型数组名[]两种形式,推荐优先使用数据类型[]数组名写法,数组长度一旦创建就不可修改,基础类型数组元素默认自动填充初始值,引用类型数组元素默认值为null,该语法适用于JavaSE8及更高版本,不适合在Javascript、C等其他编程语言中套用。
java如何声明数组的基础语法格式
数据类型[]数组名是Java官方推荐的书写格式,方括号紧跟类型,能直观体现数组属于这个类型,代码可读性更高。你可以只做声明不分配内存,例如int[]arr,此时仅创建数组引用变量,没有开辟堆内存空间,不能直接读写数组元素,必须后续使用new关键字分配长度。另一种写法数据类型数组名[]是兼容C语言的旧写法,例如intarr[],功能完全一致,但项目编码规范里较少采用,多人协作开发时容易造成阅读混淆。
数组声明只定义引用变量,不创建存储元素的容器。
java如何声明数组并分配内存空间
使用new关键字可以在声明数组的同时指定数组长度,一次性完成变量声明与内存分配。代码示例int[]arr=newint[5],这条语句会创建长度为5的int数组,堆内存开辟5个连续空间,int类型元素默认填充0。不同类型数组默认值存在区别,布尔类型默认false,char类型默认空字符,引用类型全部默认null。你必须在方括号内填写正整数作为数组长度,填写负数会抛出NegativeArraySizeException运行时异常。
java如何声明数组并直接初始化元素
数组初始化简写方式不需要写new关键字与数组长度,编译器会根据大括号内元素数量自动计算数组长度。代码示例int[]arr={1,2,3,4},数组长度固定为4,元素依次填入对应下标。完整写法int[]arr=newint[]{1,2,3,4},这种写法可以拆分声明和初始化,适合变量已经提前定义的场景。大括号内的元素类型必须和数组定义的数据类型保持一致,类型不匹配会直接触发编译报错。
| 声明方式 | 代码示例 | 适用场景 | 特点 |
|---|---|---|---|
| 仅声明数组 | int[]arr; | 数组长度运行时确定 | 无堆内存,不可读写元素 |
| 声明+指定长度 | int[]arr=newint[5]; | 元素后续逐个赋值 | 自动填充默认值 |
| 声明+直接初始化 | int[]arr={1,2,3}; | 元素值提前已知 | 自动推导数组长度 |
二维数组的声明写法
二维数组本质是数组里面存放数组,声明语法沿用一维数组的规则。写法int[][]arr=newint[3][2]代表外层数组长度3,内层每个子数组长度固定为2。你也可以只定义外层长度,内层子数组单独创建,int[][]arr=newint[3][],此时外层3个元素初始值都是null,后续再分别new子数组。初始化简写int[][]arr={{1,2},{3,4},{5,6}},适合行列数据固定的场景。
数组下标从0开始访问,最大下标等于数组长度减一。
数组声明常见编译错误
你不能在声明数组时同时在方括号填写长度,例如int[5]arr,这段代码会编译失败,长度只能搭配new关键字使用。初始化简写写法拆分变量声明和赋值时不能省略newint[],写int[]arr;arr={1,2,3}会编译报错,需要改成arr=newint[]{1,2,3}。尝试访问超出数组长度的下标,不会触发编译错误,但运行代码会抛出ArrayIndexOutOfBoundsException异常。
数组的适用边界
数组适合元素数量固定、随机访问速度要求高的场景,数组占用连续内存,读取元素效率高。数组长度创建完成后无法扩容,元素增删操作需要新建数组复制数据,频繁增减元素的业务场景优先选用ArrayList集合。数组存储基础数据类型时保存真实值,存储对象时只保存对象引用地址,修改引用会影响多个指向同一对象的数组变量。
Java语言规范JLS§10定义数组相关语法规则,所有写法都遵循该规范。
