- 静态初始化:在创建数组的同时就指定其初始值。
- 动态初始化:先创建数组,指定其长度,然后再为每个元素赋值。
下面我们分别对这两种方式进行详细说明。

静态初始化
静态初始化是指在声明数组的同时,使用花括号 为其元素分配初始值,这种方式简单直接,适用于在创建时就已经知道数组内容的情况。
声明并初始化(一步完成)
这是最常见和推荐的静态初始化方式。
// 语法:char[] 数组名 = new char[] { '值1', '值2', '值3', ... };
// 示例1:创建一个包含 'H', 'e', 'l', 'l', 'o' 的 char 数组
char[] helloArray = new char[] { 'H', 'e', 'l', 'l', 'o' };
// 示例2:创建一个包含 'J', 'a', 'v', 'a' 的 char 数组
char[] javaArray = new char[] { 'J', 'a', 'v', 'a' };
// 示例3:创建一个包含数字字符的 char 数组
char[] numberArray = new char[] { '1', '2', '3', '4', '5' };
关键点:
new char[]:这部分是必须的,它告诉 JVM 你要创建一个新的char类型数组。- 字符必须使用单引号括起来。
先声明,再初始化(两步完成)
这种方式适用于先声明数组变量,稍后再确定其具体内容的情况。

// 第一步:声明一个 char 数组变量
char[] greetingArray;
// 第二步:稍后进行初始化
greetingArray = new char[] { 'G', 'o', 'o', 'd', ' ', 'M', 'o', 'r', 'n', 'i', 'n', 'g' };
动态初始化
动态初始化是指先为数组分配内存空间(指定数组的长度),然后再通过索引为每个元素逐一赋值,这种方式适用于在创建数组时还不知道具体内容,但知道需要存储多少个元素的情况。
声明并分配空间(一步完成)
// 语法:char[] 数组名 = new char[长度]; // 示例:创建一个长度为 5 的 char 数组,所有元素默认值为 '\u0000' (空字符) char[] dynamicArray = new char[5];
关键点:
[5]:方括号中的数字表示数组的长度,也就是可以存储多少个char元素,一旦指定,长度不可改变。- 默认值:使用
new关键字动态初始化后,数组中的所有元素都会被赋予其对应数据类型的默认值,对于char类型,默认值是'\u0000'(一个不可见的空字符),而不是null。
先声明,再分配空间(两步完成)
// 第一步:声明一个 char 数组变量 char[] anotherDynamicArray; // 第二步:稍后为其分配空间,例如长度为 10 anotherDynamicArray = new char[10];
为动态初始化的数组赋值
分配完空间后,你需要使用索引(从 0 开始)来为每个元素赋值。

char[] name = new char[4]; // 创建一个长度为 4 的数组 // 使用索引为每个元素赋值 name[0] = 'J'; name[1] = 'a'; name[2] = 'v'; name[3] = 'a'; // 打印数组内容(下面会讲到如何打印) // 输出结果会是: [J, a, v, a] System.out.println(java.util.Arrays.toString(name));
特殊用法:从字符串创建 char 数组
这是在实际开发中最常用的方法之一,你可以将一个 String 对象直接转换为一个 char 数组,其中数组的每个元素对应字符串中的一个字符。
String str = "Hello, Java!"; // 使用 String 的 toCharArray() 方法 char[] charArrayFromStr = str.toCharArray(); // 打印数组内容 // 输出结果: [H, e, l, l, o, ,, , J, a, v, a, !] System.out.println(java.util.Arrays.toString(charArrayFromStr));
如何打印 char 数组的内容
直接使用 System.out.println() 打印 char 数组变量,输出的是数组的内存地址(类似于 [C@15db9742),而不是数组内容。
要正确打印数组内容,有几种方法:
使用 Arrays.toString()
这是最简单、最推荐的方法,它会返回一个包含数组所有元素的字符串表示形式。
import java.util.Arrays; // 需要导入 java.util.Arrays 包
char[] myArray = { 'a', 'b', 'c' };
System.out.println(Arrays.toString(myArray)); // 输出: [a, b, c]
使用 for 循环
你可以遍历数组并手动打印每个元素。
char[] myArray = { 'a', 'b', 'c' };
System.out.print("[");
for (int i = 0; i < myArray.length; i++) {
System.out.print(myArray[i]);
if (i < myArray.length - 1) {
System.out.print(", ");
}
}
System.out.println("]"); // 输出: [a, b, c]
使用增强 for 循环 (for-each)
这种方法更简洁,适用于不需要索引的场景。
char[] myArray = { 'a', 'b', 'c' };
System.out.print("[");
for (char c : myArray) {
System.out.print(c + ", ");
}
// 去掉最后一个逗号和空格(需要额外处理)
// 这里为了简单,直接输出
System.out.println("\b\b]"); // \b 是退格符,用于删除最后的 ", "
总结与最佳实践
| 初始化方式 | 语法示例 | 适用场景 |
|---|---|---|
| 静态初始化 | char[] arr = new char[]{'a', 'b'}; |
已确定。 |
| 从字符串转换 | char[] arr = "abc".toCharArray(); |
最常用,将字符串内容转为字符数组。 |
| 动态初始化 | char[] arr = new char[5]; |
创建时只知道长度,内容后续填充。 |
核心要点回顾:
- 字符 vs 字符串:
'a'是一个char类型,而"a"是一个String类型。 - 默认值:
char数组动态初始化后,默认值为'\u0000'。 - 打印数组:要打印数组内容,请使用
java.util.Arrays.toString()。 - 不可变性:数组一旦创建,其长度就固定不变。
根据你的具体需求选择合适的初始化方式,如果是从字符串处理,toCharArray() 是你的首选,如果内容已知,静态初始化最清晰,如果长度已知但内容未知,则使用动态初始化。
