杰瑞科技汇

Java String数组如何正确定义?

Java 中的字符串数组是一个可以存储多个 String 对象的容器,下面我将从最基础的语法开始,逐步介绍不同的定义和初始化方式,并提供详细的代码示例。

Java String数组如何正确定义?-图1
(图片来源网络,侵删)

基本语法

定义一个字符串数组的基本语法有两种,它们是等价的:

// 方式一:推荐,更具可读性
String[] arrayName;
// 方式二:C/C++ 风格,同样有效
String arrayName[];
  • String: 表示数组中存储的元素类型是字符串。
  • []: 表示这是一个数组。
  • arrayName: 你为数组指定的变量名。

重要提示: 仅仅使用上面的语法只是声明了一个可以引用字符串数组的变量 arrayName,此时它并没有指向任何实际的数组对象,它的值是 null,如果你试图在初始化数组之前使用它,会抛出 NullPointerException


初始化数组

在声明数组后,你需要为它分配内存空间并赋值,这个过程称为初始化,初始化可以在声明时完成,也可以在之后完成。

1 声明时初始化

这是最常见的方式。

Java String数组如何正确定义?-图2
(图片来源网络,侵删)

a) 创建固定长度的数组并赋值

// 声明、创建并初始化一个包含3个元素的字符串数组
String[] fruits = new String[]{"Apple", "Banana", "Orange"};
// 也可以省略 new String[],编译器会自动推断
String[] fruits2 = {"Apple", "Banana", "Orange"};
  • new String[3]: 创建了一个可以存放3个 String 对象的数组。
  • {"Apple", "Banana", "Orange"}: 在创建的同时,为数组的每个元素赋上初始值。
  • 注意:数组的长度是固定的,一旦创建,就不能改变,在这个例子中,fruits 数组的长度永远是 3。

b) 创建固定长度的数组,稍后赋值

如果你知道数组需要多大,但暂时不知道具体要存什么值,可以先创建一个固定大小的数组,之后再赋值。

// 声明并创建一个长度为 5 的字符串数组,所有元素初始值为 null
String[] students = new String[5];
// 稍后为数组的特定位置赋值
students[0] = "张三";
students[1] = "李四";
students[2] = "王五";
// students[3] 和 students[4] 仍然是 null
  • new String[5]: 创建了一个长度为 5 的数组。
  • students[0]: 通过索引(index)访问数组中的元素。Java 数组的索引从 0 开始

访问和操作数组

1 获取数组长度

使用 length 属性来获取数组的长度。

String[] languages = {"Java", "Python", "C++"};
int length = languages.length; // length 的值是 3
System.out.println("数组的长度是: " + length);

2 访问元素

通过索引来访问或修改数组中的元素。

String[] languages = {"Java", "Python", "C++"};
// 访问第一个元素
String firstLang = languages[0]; // firstLang 的值是 "Java"
System.out.println("第一种语言: " + firstLang);
// 修改第二个元素
languages[1] = "JavaScript";
System.out.println("修改后的第二种语言: " + languages[1]); // 输出 "JavaScript"

3 遍历数组

遍历(或迭代)是指访问数组中的每一个元素,有几种常见的方法:

Java String数组如何正确定义?-图3
(图片来源网络,侵删)

a) 使用 for 循环(传统方式)

String[] languages = {"Java", "Python", "C++"};
System.out.println("--- 使用 for 循环遍历 ---");
for (int i = 0; i < languages.length; i++) {
    System.out.println("语言: " + languages[i]);
}

b) 增强 for 循环 (for-each loop)(推荐)

这是最简洁、最安全(不用担心索引越界)的遍历方式,适用于只需要读取数组元素而无需修改的场景。

String[] languages = {"Java", "Python", "C++"};
System.out.println("--- 使用 for-each 循环遍历 ---");
for (String lang : languages) {
    System.out.println("语言: " + lang);
}
  • String lang: 定义一个临时变量 lang,它会依次接收数组 languages 中的每一个元素。
  • 关键字,表示“在...中”。

完整示例代码

下面是一个完整的示例,展示了字符串数组的定义、初始化、访问、修改和遍历。

public class StringArrayExample {
    public static void main(String[] args) {
        // 1. 声明并初始化一个字符串数组
        String[] weekDays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
        // 2. 打印数组的长度
        System.out.println("工作日数组长度: " + weekDays.length);
        // 3. 访问并打印第一个元素
        System.out.println("第一天是: " + weekDays[0]);
        // 4. 修改一个元素
        weekDays[0] = "星期一"; // 将 "Monday" 改为 "星期一"
        System.out.println("修改后的第一天是: " + weekDays[0]);
        // 5. 使用 for-each 循环遍历并打印所有元素
        System.out.println("\n--- 遍历所有工作日 ---");
        for (String day : weekDays) {
            System.out.println(day);
        }
        // 6. 创建一个固定长度但初始为 null 的数组,并填充
        String[] hobbies = new String[3];
        hobbies[0] = "编程";
        hobbies[1] = "阅读";
        // hobbies[2] 保持为 null
        System.out.println("\n--- 我的爱好 ---");
        for (String hobby : hobbies) {
            // 在使用前检查是否为 null,避免 NullPointerException
            if (hobby != null) {
                System.out.println(hobby);
            }
        }
    }
}

输出结果:

工作日数组长度: 5
第一天是: Monday
修改后的第一天是: 星期一
--- 遍历所有工作日 ---
星期一
Tuesday
Wednesday
Thursday
Friday
--- 我的爱好 ---
编程
阅读

可变长度数组:ArrayList<String>

在实际开发中,我们经常需要动态地添加或删除元素,而 Java 原始数组(String[])的长度是固定的,这时,java.util.ArrayList 是更好的选择。

ArrayList 是一个动态数组,可以根据需要自动调整大小。

ArrayList 的基本用法

import java.util.ArrayList; // 别忘了导入包
public class ArrayListExample {
    public static void main(String[] args) {
        // 1. 创建一个 String 类型的 ArrayList
        ArrayList<String> names = new ArrayList<>();
        // 2. 添加元素 (长度会自动增加)
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");
        // 3. 打印 ArrayList
        System.out.println("当前列表: " + names); // 输出: [Alice, Bob, Charlie]
        // 4. 访问元素
        String firstPerson = names.get(0); // 获取索引为 0 的元素
        System.out.println("第一个人是: " + firstPerson);
        // 5. 在指定位置插入元素
        names.add(1, "David"); // 在索引 1 的位置插入 "David"
        System.out.println("插入后列表: " + names); // 输出: [Alice, David, Bob, Charlie]
        // 6. 修改元素
        names.set(2, "Eve"); // 将索引 2 的元素 "Bob" 修改为 "Eve"
        System.out.println("修改后列表: " + names); // 输出: [Alice, David, Eve, Charlie]
        // 7. 删除元素
        names.remove("Alice"); // 删除值为 "Alice" 的元素
        // names.remove(0);     // 也可以通过索引删除
        System.out.println("删除后列表: " + names); // 输出: [David, Eve, Charlie]
        // 8. 获取大小 (相当于数组的 length)
        System.out.println("列表大小: " + names.size());
        // 9. 遍历 ArrayList
        System.out.println("\n--- 遍历列表 ---");
        for (String name : names) {
            System.out.println(name);
        }
    }
}

String[] vs ArrayList<String>

特性 String[] (原始数组) ArrayList<String> (动态数组)
长度 固定,创建时必须指定 可变,可以动态添加或删除
性能 访问(get/set)速度极快 访问速度稍慢,但通常可以忽略不计
功能 功能较少,只能存储固定数量的元素 功能丰富,提供了添加、删除、查找等方法
语法 语法简洁 需要导入 java.util.ArrayList,语法稍显冗长
适用场景 数量固定且已知。
性能是首要考虑因素(如高性能计算)。
作为方法参数传递,要求是原始数组类型。
数量不固定,需要频繁增删。
需要使用集合框架提供的丰富功能。
绝大多数日常开发场景下的首选

  • 如果你确定需要存储多少个字符串,并且之后数量不会变,用 String[]
  • 如果你需要一个灵活的、可以随意增删字符串的列表,用 ArrayList<String>,在 Java 编程中,后者使用得更为普遍。
分享:
扫描分享到社交APP
上一篇
下一篇