核心概念
在 Java 中,数组是一个对象,要创建一个数组对象,你需要两步:

- 声明数组变量:告诉编译器你打算使用一个数组变量来存储数组引用。
- 创建数组对象:使用
new关键字在内存中为数组分配空间,并将其引用赋值给之前声明的变量。
声明数组变量
在创建数组之前,你需要先声明它,有三种常见的声明方式,它们在功能上是等价的:
// 方式一:推荐,数据类型[] 数组名
int[] numbers;
// 方式二:C/C++ 风格,数据类型 数组名[]
int numbers2[];
// 方式三:声明并直接初始化
int[] numbers3 = {1, 2, 3};
注意:在 Java 中,推荐使用
数据类型[] 数组名的方式,因为它更能表明numbers是一个int类型的数组,而不是一个int类型的变量。
使用 new 关键字创建和初始化数组
new 关键字用于为数组分配内存空间,初始化数组主要有以下几种方式。
声明后,再创建并分配大小(最常用)
这种方式先声明数组,然后用 new 指定数组长度,系统会自动为每个元素赋予默认值。

语法:
数组变量 = new 数据类型[数组长度];
示例:
// 1. 声明一个整型数组 int[] scores; // 2. 使用 new 创建一个长度为 5 的数组,并分配默认值 // 数组长度一旦确定,就不能再改变 scores = new int[5]; // scores 数组的内容是: // [0, 0, 0, 0, 0] // int 类型的默认值是 0
不同数据类型的默认值:
| 数据类型 | 默认值 |
|---|---|
byte, short, int, long |
0 |
float, double |
0 |
char |
'\u0000' (空字符) |
boolean |
false |
引用类型 (如 String, Object) |
null |
示例(其他数据类型):
// 创建一个 String 数组,长度为 3 String[] names = new String[3];是: [null, null, null] // 创建一个 boolean 数组,长度为 4 boolean[] flags = new boolean[4];是: [false, false, false, false]
声明、创建和初始化一步完成(推荐)
这是更简洁、更常用的写法,将声明和 new 操作放在一行。
语法:
数据类型[] 数组变量 = new 数据类型[数组长度];
示例:
// 创建一个长度为 3 的字符串数组 String[] fruits = new String[3]; // fruits 数组的内容是: // [null, null, null] // 你可以通过索引为每个元素赋值 fruits[0] = "Apple"; fruits[1] = "Banana"; fruits[2] = "Orange"; // fruits 的内容是: // ["Apple", "Banana", "Orange"]
创建数组并同时指定初始值
如果你在创建数组时就知道了它的所有元素,可以使用这种更便捷的方式,这种方式不需要显式指定数组长度,因为编译器会根据你提供的初始值列表自动计算。
语法:
数据类型[] 数组变量 = new 数据类型[]{元素1, 元素2, ..., 元素N};
注意:在这种写法中,new 数据类型[] 中的 [] 不能写数字(即不能指定长度)。
示例:
// 创建一个包含 3 个元素的 int 数组
int[] numbers = new int[]{10, 20, 30};
// 创建一个包含 4 个元素的 String 数组
String[] cities = new String[]{"北京", "上海", "广州", "深圳"};
// 系统会自动确定数组的长度
// numbers.length 的值是 3
// cities.length 的值是 4
简化写法(类型推断 - Java 7+)
如果你在创建数组时已经提供了初始值列表,可以使用这种更简化的写法,省略 new 数据类型[]。
语法:
数据类型[] 数组变量 = {元素1, 元素2, ..., 元素N};
示例:
// 这是最简洁的初始化方式
int[] primes = {2, 3, 5, 7, 11, 13};
String[] weekdays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
// 等同于
int[] primes2 = new int[]{2, 3, 5, 7, 11, 13};
重要提示:这种简化的初始化方式只能在声明变量的同一行使用,如果你先声明了变量,再想用这种方式初始化,会编译错误。
int[] scores; scores = {90, 85, 88}; // 编译错误! // 正确的做法是: scores = new int[]{90, 85, 88};
总结与对比
| 方式 | 语法 | 说明 | 适用场景 |
|---|---|---|---|
| 分配大小 | int[] arr = new int[5]; |
创建数组,指定长度,元素为默认值。 | 数组长度已知,但初始值稍后确定。 |
| 指定初始值 | int[] arr = new int[]{1, 2, 3}; |
创建数组并指定所有初始值。 | 数组长度和初始值在创建时都已知。 |
| 简化写法 | int[] arr = {1, 2, 3}; |
(推荐) 创建数组并指定初始值的最简方式。 | 数组长度和初始值在创建时都已知,代码更简洁。 |
访问和修改数组元素
数组通过索引来访问或修改其元素,索引从 0 开始。
// 创建并初始化一个数组
int[] scores = new int[3];
// 修改元素
scores[0] = 95; // 修改第一个元素
scores[1] = 88; // 修改第二个元素
scores[2] = 100; // 修改第三个元素
// 访问元素
int firstScore = scores[0]; // firstScore 的值是 95
System.out.println("第一个分数: " + firstScore);
// 获取数组长度
int length = scores.length; // length 的值是 3
System.out.println("数组长度: " + length);
多维数组初始化
new 也可以用来初始化多维数组(数组的数组)。
// 创建一个 3x4 的二维数组(3行4列)
int[][] matrix = new int[3][4];
// 创建一个不规则的二维数组
int[][] triangle = new int[3][]; // 只指定行数
triangle[0] = new int[1]; // 第1行有1个元素
triangle[1] = new int[2]; // 第2行有2个元素
triangle[2] = new int[3]; // 第3行有3个元素
// 或者直接初始化
int[][] anotherMatrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
希望这个详细的解释能帮助你完全理解 Java 中使用 new 初始化数组的方法!
