Java一维数组是对象,定义仅声明引用,必须用new或{}初始化才能使用;推荐int[] arr写法;内存分配在堆中;基本类型元素默认0/false/’\u0000’,引用类型默认null;下标从0开始,越界抛ArrayIndexOutOfBoundsException。

Java 一维数组不是“变量”而是“对象”,定义只是声明一个引用,真正使用前必须完成内存分配和初始化——缺一不可。
一维数组怎么定义?两种写法,推荐一种
定义数组本质是声明一个能指向数组对象的引用变量。语法有两种:
- 推荐写法:数据类型[] 数组名,例如 int[] scores; ——清晰表明“scores 是 int[] 类型”,符合 Java 类型语义
- 旧式写法:数据类型 数组名[],例如 int scores[]; ——易误解为“scores 是 int 类型”,已不建议使用
注意:此时仅声明了引用,并未创建数组对象,不能访问元素(编译通过但运行会报 NullPointerException 或未初始化错误)。
数组内存在哪分配?必须用 new 或静态初始化
数组是引用类型,所有实例都存放在堆内存中。分配内存只有两种合法途径:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 动态分配:用 new 数据类型[长度] 明确申请空间,例如 int[] arr = new int[5]; ——系统分配 5 个 int 的连续空间,每个元素自动设为默认值(int 为 0)
- 静态分配:用 new 数据类型[]{值1, 值2, ...} 或简写 数据类型[] arr = {值1, 值2, ...}; ——JVM 根据元素个数推断长度并一次性分配、赋值
没有 new 或大括号初始化,就等于没给数组对象“出生证”,后续任何下标操作都会失败。
初始化后,元素默认值是什么?不同类型不一样
只要完成初始化(无论动态还是静态),每个元素就有确定的初始值。基本类型有固定默认值,引用类型默认为 null:
- 数值型(byte/short/int/long/float/double)→ 默认 0 或 0.0
- char → 默认 '\u0000'(空字符,不是空格)
- boolean → 默认 false
- String 或自定义类数组 → 每个元素默认 null,直接调用方法会触发 NullPointerException
例如 String[] names = new String[3]; 创建后 names[0]、names[1]、names[2] 全为 null,需单独赋值才能安全使用。
赋值和访问:下标从 0 开始,越界会抛异常
数组长度固定,一旦初始化完成就不能扩容或缩容。访问和修改靠下标(索引),规则简单但必须遵守:
- 合法下标范围是 0 到 length - 1,例如长度为 4 的数组,可用下标是 0、1、2、3
- 赋值示例:arr[0] = 10; arr[2] = 30;
- 读取示例:int first = arr[0]; System.out.println(arr[3]);
- 越界访问(如 arr[-1] 或 arr[5] 当 length=5)会抛出 ArrayIndexOutOfBoundsException
获取长度统一用 数组名.length(注意不是 length() 方法),这是数组唯一的公共字段。

















