在 Java 中,数组的长度是一个固定的属性,它表示数组可以容纳多少个元素,对于 String 它的长度就是可以存放多少个 String 对象。

核心概念:如何获取和设置长度
获取长度
使用数组的 length 属性来获取其长度,这是一个只读的属性,意味着你只能获取它的值,但不能直接修改它。
语法:
数组名.length
示例代码:
public class StringArrayLength {
public static void main(String[] args) {
// 1. 声明并初始化一个 String 数组
String[] fruits = new String[5]; // 创建一个长度为 5 的 String 数组
// 2. 获取并打印数组长度
System.out.println("数组的初始长度是: " + fruits.length); // 输出: 5
// 3. 向数组中添加元素
fruits[0] = "Apple";
fruits[1] = "Banana";
fruits[2] = "Orange";
// 4. 数组的长度不会因为添加了元素而改变
System.out.println("添加元素后,数组的长度仍然是: " + fruits.length); // 输出: 5
// 5. 数组的长度是固定的,一旦创建就不能改变
// fruits.length = 10; // 这行代码会编译错误!
}
}
“设置”长度(实际上是创建新数组)
由于数组的长度是固定的,你无法直接“修改”一个已存在数组的长度,如果你需要一个不同长度的数组,唯一的办法是创建一个新数组,然后将旧数组中的元素复制到新数组中。

示例代码:
public class ResizeStringArray {
public static void main(String[] args) {
String[] oldNames = {"Alice", "Bob", "Charlie"};
System.out.println("旧数组的长度: " + oldNames.length); // 输出: 3
// 1. 创建一个新数组,长度为 5
String[] newNames = new String[5];
// 2. 使用 System.arraycopy() 方法复制旧数组到新数组
// System.arraycopy(源数组, 源数组起始位置, 目标数组, 目标数组起始位置, 复制元素个数)
System.arraycopy(oldNames, 0, newNames, 0, oldNames.length);
// 3. 给新数组的剩余位置赋值
newNames[3] = "David";
newNames[4] = "Eve";
// 4. newNames 就是我们想要的更长数组
System.out.println("新数组的长度: " + newNames.length); // 输出: 5
System.out.println("新数组的内容: " + java.util.Arrays.toString(newNames)); // 输出: [Alice, Bob, Charlie, David, Eve]
}
}
注意:在实际开发中,如果你需要一个长度可以动态改变的数组,应该使用
ArrayList<String>而不是原生数组。ArrayList内部管理着一个数组,当容量不足时会自动扩容。
不同初始化方式下的长度
Java 中初始化数组有几种常见方式,它们的长度表现如下:
使用 new 关键字指定长度
这种方式创建的数组,所有元素都会被赋予默认值(对于 String,默认值是 null)。
String[] languages = new String[3]; [null, null, null] // 数组长度: 3
直接初始化并赋值
这种方式,编译器会根据你提供的元素个数自动计算并设置数组长度。
String[] planets = {"Earth", "Mars", "Jupiter"}; [Earth, Mars, Jupiter]
// 数组长度: 3 (由编译器自动确定)
声明后初始化
先声明数组,稍后再用 new 关键字和初始值列表来初始化。
String[] cars;
// ... 其他代码 ...
cars = new String[]{"Toyota", "Honda", "Ford"}; [Toyota, Honda, Ford]
// 数组长度: 3 (由初始化列表的元素个数决定)
常见操作与注意事项
遍历数组并检查元素
获取长度最常见的用途就是遍历数组。
String[] names = {"Tom", "Jerry", "Spike"};
// 使用 for 循环
for (int i = 0; i < names.length; i++) {
System.out.println("索引 " + i + ": " + names[i]);
}
// 使用 for-each 循环 (更推荐)
for (String name : names) {
System.out.println("名字: " + name);
}
ArrayIndexOutOfBoundsException (数组索引越界异常)
这是初学者最常遇到的错误,当你尝试访问一个不存在的索引(索引小于 0 或大于等于 length)时,就会抛出这个异常。
String[] data = new String[2]; // 索引范围是 0 和 1 // data[0] = "A"; // data[1] = "B"; // 以下代码会抛出异常 String item = data[2]; // 错误!索引 2 超出了范围 [0, 1]
如何避免? 在通过索引访问数组元素前,始终确保索引在有效范围内。
int index = 2;
if (index >= 0 && index < data.length) {
String item = data[index];
} else {
System.out.println("索引 " + index + " 不存在!");
}
NullPointerException (空指针异常)
当你尝试在一个 null 的引用上调用方法或访问属性(如 .length)时,会抛出此异常。
String[] myArray = null; // int len = myArray.length; // 错误!抛出 NullPointerException
如何避免? 在使用数组前,先检查它是否为 null。
if (myArray != null) {
System.out.println("数组长度是: " + myArray.length);
} else {
System.out.println("数组是 null,无法获取长度。");
}
| 特性 | 描述 |
|---|---|
| 如何获取 | 使用 数组名.length 属性。 |
| 长度是否可变 | 否,数组一旦创建,其长度就是固定的。 |
| 如何“改变”长度 | 创建一个新长度的数组,然后将旧数组内容复制过去。 |
| 默认值 | 使用 new 创建时,String 数组的元素默认为 null。 |
| 常见异常 | ArrayIndexOutOfBoundsException (索引越界) 和 NullPointerException (空指针)。 |
| 替代方案 | 如果需要动态长度的列表,请使用 java.util.ArrayList<String>。 |
