核心概念
在 Java 中,数组是一个固定长度的、可以存储相同类型数据(这里是 String 类型)的容器。

(图片来源网络,侵删)
声明并指定数组长度(未初始化)
这是最基本的方法,你首先声明一个 String 类型的数组变量,并指定它能存放多少个元素,数组中的所有元素都还没有被赋值,它们的默认值是 null。
语法:
String[] arrayName = new String[length];
示例:
public class Main {
public static void main(String[] args) {
// 声明一个可以存放3个字符串的数组
String[] fruits = new String[3];
// 此时数组中的元素都是 null
System.out.println(fruits[0]); // 输出: null
System.out.println(fruits[1]); // 输出: null
System.out.println(fruits[2]); // 输出: null
// 为数组的元素赋值
fruits[0] = "Apple";
fruits[1] = "Banana";
fruits[2] = "Orange";
// 打印数组
System.out.println(fruits[0]); // 输出: Apple
System.out.println(fruits[1]); // 输出: Banana
System.out.println(fruits[2]); // 输出: Orange
}
}
声明并初始化(静态初始化)
如果你在创建数组时就知道了所有要存储的元素,可以使用这种方法,它更简洁,也更常用。

(图片来源网络,侵删)
语法:
String[] arrayName = {element1, element2, element3, ...};
示例:
public class Main {
public static void main(String[] args) {
// 声明并直接初始化一个包含3个元素的数组
String[] fruits = {"Apple", "Banana", "Orange"};
// 打印数组
System.out.println(fruits[0]); // 输出: Apple
System.out.println(fruits[1]); // 输出: Banana
System.out.println(fruits[2]); // 输出: Orange
// 修改数组中的元素
fruits[1] = "Grape";
System.out.println(fruits[1]); // 输出: Grape
}
}
先声明,再初始化
这是方法一和方法二的结合,你先声明数组变量,然后在后续的代码中再进行初始化。
示例:

(图片来源网络,侵删)
public class Main {
public static void main(String[] args) {
// 1. 先声明数组变量,但不指定长度或初始值
String[] fruits;
// 2. 在后面的代码中再进行初始化
// 注意:这一步必须在第一次使用数组之前完成
fruits = new String[]{"Apple", "Banana", "Orange"};
// 打印数组
for (int i = 0; i < fruits.length; i++) {
System.out.println(fruits[i]);
}
}
}
重要补充:数组的遍历
一旦你创建了数组,通常需要遍历(访问)其中的所有元素,有几种常见的方式:
使用 for 循环(传统方式)
通过索引来访问每个元素。
String[] fruits = {"Apple", "Banana", "Orange"};
for (int i = 0; i < fruits.length; i++) {
System.out.println("Fruit " + i + ": " + fruits[i]);
}
使用 for-each 循环(增强型 for 循环)
这是最推荐、最简洁的遍历方式,尤其当你只需要读取数组元素而不需要关心索引时。
String[] fruits = {"Apple", "Banana", "Orange"};
for (String fruit : fruits) {
System.out.println("Fruit: " + fruit);
}
使用 Arrays.toString()(用于打印)
如果你想把整个数组的内容以 [elem1, elem2, ...] 的形式打印出来,可以使用 java.util.Arrays 工具类。
import java.util.Arrays; // 别忘了导入这个包
String[] fruits = {"Apple", "Banana", "Orange"};
// 直接打印数组变量,会输出类似 "[Ljava.lang.String;@15db9742" 的哈希码
System.out.println(fruits);
// 使用 Arrays.toString() 可以得到我们期望的格式
System.out.println(Arrays.toString(fruits)); // 输出: [Apple, Banana, Orange]
总结与对比
| 方法 | 语法 | 特点 | 适用场景 |
|---|---|---|---|
| 方法一 | String[] arr = new String[3]; |
先分配空间,元素默认为 null,后续再赋值。 |
数组元素的数量确定,但初始值需要在程序运行时才能确定。 |
| 方法二 | String[] arr = {"A", "B"}; |
声明、分配空间、赋值一步完成,非常简洁。 | 数组的所有初始值在编写代码时就已经明确。 |
| 方法三 | String[] arr; arr = new String[]{"A", "B"}; |
先声明,再初始化,逻辑更清晰,代码可读性高。 | 在逻辑上,数组的创建和赋值可能发生在不同的代码块中。 |
最佳实践
- 如果初始值已知,强烈推荐使用 方法二(静态初始化),因为它最简洁、最易读。
- 如果初始值未知,但知道元素数量,使用 方法一。
- 在遍历数组时,优先使用 for-each 循环,除非你需要操作元素的索引。
