char 数组是 Java 中一种基本数据类型的数组,用于存储字符,初始化 char 数组主要有以下几种方式,每种方式都有其特定的使用场景。

(图片来源网络,侵删)
声明时直接初始化(静态初始化)
这是最直接的方式,在声明数组的同时就为其分配空间并赋值。
语法:
char[] arrayName = new char[] { '值1', '值2', '值3', ... };
或者更简洁的写法(只能在声明时使用):
char[] arrayName = { '值1', '值2', '值3', ... };
示例:
// 方式一:使用 new 关键字
char[] vowels1 = new char[] { 'a', 'e', 'i', 'o', 'u' };
// 方式二:简化的静态初始化(推荐)
char[] vowels2 = { 'a', 'e', 'i', 'o', 'u' };
// 打印数组内容
System.out.println(Arrays.toString(vowels1)); // 输出: [a, e, i, o, u]
System.out.println(Arrays.toString(vowels2)); // 输出: [a, e, i, o, u]
注意:这种方式必须在一行内完成,如果你先声明数组,再想用这种方式初始化,编译器会报错。
// 错误示例
char[] wrongArray;
wrongArray = { 'a', 'b', 'c' }; // 编译错误: 不允许使用这种语法进行赋值
先声明,后初始化(分步初始化)
如果你需要在声明数组和为其赋值之间执行其他操作,可以分两步完成。

(图片来源网络,侵删)
步骤:
- 声明:指定数组名和大小,但不赋值,数组元素会被赋予默认值。
- 初始化:通过索引为每个元素赋值。
char 类型的默认值:
在 Java 中,任何数值类型(包括 char)的数组元素,在被显式赋值之前,都有一个默认值。
char类型的默认值是'\u0000'(即空字符,NULL character)。- 这个字符是不可见的,它在 Unicode 编码中的值为 0。
示例:
// 1. 声明一个长度为 5 的 char 数组 char[] name = new char[5]; // 2. 通过索引为每个元素赋值 name[0] = 'J'; name[1] = 'a'; name[2] = 'v'; name[3] = 'a'; // name[4] 没有被赋值,所以它的值是默认的 '\u0000' // 打印数组内容 System.out.println(Arrays.toString(name)); // 输出: [J, a, v, a, ] (最后一个元素是空的,打印出来看不见)
你可以通过 (int) 强制转换来查看默认值:
System.out.println((int) name[4]); // 输出: 0
使用 Arrays.fill() 方法初始化
如果你想将数组中的所有元素都初始化为同一个特定的字符,可以使用 java.util.Arrays 工具类中的 fill() 方法,这在初始化一个“空白”或“占位”数组时非常有用。
语法:
Arrays.fill(char[] array, char value);
示例:
import java.util.Arrays; // 1. 声明一个长度为 10 的数组 char[] buffer = new char[10]; // 2. 将所有元素填充为 '-' Arrays.fill(buffer, '-'); // 打印数组内容 System.out.println(Arrays.toString(buffer)); // 输出: [-, -, -, -, -, -, -, -, -, -]
从字符串(String)初始化
这是非常常见的一种需求,比如将一个单词或句子转换成字符数组进行处理。
语法:
Java 的 String 类提供了一个非常方便的方法 toCharArray()。
示例:
String greeting = "Hello, World!"; // 将字符串转换为 char 数组 char[] chars = greeting.toCharArray(); // 打印数组内容 System.out.println(Arrays.toString(chars)); // 输出: [H, e, l, l, o, ,, , W, o, r, l, d, !]
这种方法非常高效,是处理字符串字符的标准方式。
使用循环初始化
当你需要根据某种规则(生成连续的字母或数字)来初始化数组时,使用循环是最灵活的方式。
示例:初始化包含 26 个小写字母的数组
char[] alphabet = new char[26];
// 使用 for 循环初始化
for (int i = 0; i < alphabet.length; i++) {
// 'a' 的 Unicode 码是 97,通过 i 的偏移量得到每个字母
alphabet[i] = (char) ('a' + i);
}
// 打印数组内容
System.out.println(Arrays.toString(alphabet));
// 输出: [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
总结与对比
| 方法 | 语法 | 适用场景 | 特点 |
|---|---|---|---|
| 静态初始化 | char[] arr = {'a', 'b'}; |
元素已知且数量较少时。 | 代码简洁,在一行内完成。 |
| 分步初始化 | char[] arr = new char[2]; arr[0]='a'; |
需要先声明数组,稍后再赋值时。 | 灵活,但元素初始为默认值 '\u0000'。 |
Arrays.fill() |
Arrays.fill(arr, '-'); |
需要将所有元素设为同一个值时。 | 代码清晰,适合批量填充。 |
String.toCharArray() |
char[] arr = "abc".toCharArray(); |
需要将字符串内容转为字符数组时。 | 最常用、最便捷的字符串转换方法。 |
| 循环初始化 | for(...){ arr[i] = ...; } |
需要根据规则(如算法)生成元素时。 | 最灵活,可处理复杂的初始化逻辑。 |
完整示例代码
import java.util.Arrays;
public class CharArrayInitialization {
public static void main(String[] args) {
System.out.println("--- 1. 静态初始化 ---");
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
System.out.println("元音数组: " + Arrays.toString(vowels));
System.out.println("\n--- 2. 分步初始化 ---");
char[] name = new char[5];
name[0] = 'J';
name[1] = 'a';
name[2] = 'v';
name[3] = 'a';
// name[4] 默认为 '\u0000'
System.out.println("名字数组: " + Arrays.toString(name));
System.out.println("未初始化元素的值: " + (int) name[4]);
System.out.println("\n--- 3. Arrays.fill() 初始化 ---");
char[] separator = new char[10];
Arrays.fill(separator, '-');
System.out.println("分隔符数组: " + Arrays.toString(separator));
System.out.println("\n--- 4. 从 String 初始化 ---");
String text = "Java";
char[] fromString = text.toCharArray();
System.out.println("从字符串转换的数组: " + Arrays.toString(fromString));
System.out.println("\n--- 5. 循环初始化 ---");
char[] numbers = new char[10];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = (char) ('0' + i);
}
System.out.println("数字数组: " + Arrays.toString(numbers));
}
}
希望这份详细的解释能帮助你完全理解 Java 中 char 数组的初始化方法!
