杰瑞科技汇

Java中如何定义string数组?

核心概念

在 Java 中,数组是一个固定长度的、可以存储相同类型元素的容器,字符串数组就是专门用来存储 String 类型对象的容器。

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

声明一个字符串数组的语法有两种,它们在功能上是等价的:

  1. String[] arrayName; (推荐,更直观,表示 "一个 String 类型的数组")
  2. String arrayName[]; (从 C/C++ 继承而来,不推荐,容易混淆)

先声明,后初始化 (两步完成)

这种方式先创建一个数组变量,稍后再为数组分配内存空间并赋值。

1 声明并初始化为默认值

当你只声明数组并指定长度时,JVM 会为所有元素分配默认值。

  • 对于 String 数组,默认值是 null
public class StringArrayExample {
    public static void main(String[] args) {
        // 1. 声明一个可以存储 3 个字符串的数组
        String[] names;
        // 2. 初始化数组,分配内存空间
        names = new String[3];
        // 3. 查看数组中的默认值
        System.out.println("数组的长度: " + names.length);
        // 输出: 数组的长度: 3
        System.out.println("第一个元素: " + names[0]);
        // 输出: 第一个元素: null
        System.out.println("第二个元素: " + names[1]);
        // 输出: 第二个元素: null
        System.out.println("第三个元素: " + names[2]);
        // 输出: 第三个元素: null
        // 4. 给数组元素赋值
        names[0] = "Alice";
        names[1] = "Bob";
        names[2] = "Charlie";
        // 5. 遍历并打印数组内容
        System.out.println("\n赋值后的数组内容:");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}

2 声明并初始化为指定值

如果你在声明数组时就知道了要存储的所有元素,可以使用这种简洁的方式。

Java中如何定义string数组?-图2
(图片来源网络,侵删)
public class StringArrayExample2 {
    public static void main(String[] args) {
        // 声明并直接初始化一个包含 4 个元素的字符串数组
        String[] fruits = {"Apple", "Banana", "Orange", "Grape"};
        // 打印数组长度
        System.out.println("水果数组的长度: " + fruits.length); // 输出: 4
        // 打印第一个元素
        System.out.println("我喜欢的水果是: " + fruits[0]); // 输出: Apple
        // 遍历数组 (使用 for-each 循环,更简洁)
        System.out.println("\n所有水果列表:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

使用 Arrays 工具类

java.util.Arrays 类提供了许多用于操作数组(包括字符串数组)的实用方法。

1 使用 Arrays.copyOf() 复制数组

import java.util.Arrays;
public class ArraysCopyExample {
    public static void main(String[] args) {
        String[] originalColors = {"Red", "Green", "Blue"};
        // 创建一个新数组,其长度和内容与 originalColors 相同
        String[] copiedColors = Arrays.copyOf(originalColors, originalColors.length);
        System.out.println("原始数组: " + Arrays.toString(originalColors));
        System.out.println("复制后的数组: " + Arrays.toString(copiedColors));
        // 修改复制后的数组,原始数组不受影响
        copiedColors[0] = "Yellow";
        System.out.println("\n修改复制后的数组后:");
        System.out.println("原始数组: " + Arrays.toString(originalColors)); // 仍然是 Red
        System.out.println("复制后的数组: " + Arrays.toString(copiedColors)); // 变为 Yellow
    }
}

2 使用 Arrays.toString() 打印数组内容

直接打印数组变量名会得到内存地址的哈希码,不方便阅读。Arrays.toString() 可以将数组内容格式化为易读的字符串。

import java.util.Arrays;
public class ArraysToStringExample {
    public static void main(String[] args) {
        String[] cities = {"Beijing", "Shanghai", "Guangzhou", "Shenzhen"};
        // 错误的打印方式
        System.out.println(cities); 
        // 输出类似: [Ljava.lang.String;@15db9742
        // 正确的打印方式
        System.out.println("城市列表: " + Arrays.toString(cities));
        // 输出: 城市列表: [Beijing, Shanghai, Guangzhou, Shenzhen]
    }
}

3 使用 Arrays.sort() 排序数组

import java.util.Arrays;
public class ArraysSortExample {
    public static void main(String[] args) {
        String[] names = {"Charlie", "Alice", "David", "Bob"};
        System.out.println("排序前: " + Arrays.toString(names));
        // 对字符串数组进行字典序排序
        Arrays.sort(names);
        System.out.println("排序后: " + Arrays.toString(names));
        // 输出: 排序后: [Alice, Bob, Charlie, David]
    }
}

使用 ListArrays.asList() (更现代的方式)

在实际开发中,我们更经常使用 List(列表),因为它比数组更灵活(长度可变,提供了更多便捷方法),你可以轻松地将数组转换为 List

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class ListFromArrayExample {
    public static void main(String[] args) {
        // 1. 从数组创建一个固定大小的 List
        String[] staticArray = {"A", "B", "C"};
        List<String> fixedList = Arrays.asList(staticArray);
        System.out.println("固定大小的 List: " + fixedList);
        // fixedList.add("D"); // 这行代码会抛出 UnsupportedOperationException,因为大小固定
        // 2. 从数组创建一个可变大小的 ArrayList (推荐)
        // 先转换为 List,再用其构造函数创建一个新的 ArrayList
        List<String> dynamicList = new ArrayList<>(Arrays.asList(staticArray));
        System.out.println("可变的 ArrayList: " + dynamicList);
        dynamicList.add("D"); // 现在可以安全地添加元素
        System.out.println("添加元素后: " + dynamicList);
    }
}

总结与最佳实践

场景 推荐方法 示例 优点
定义固定长度的字符串集合 直接初始化 String[] arr = {"a", "b"}; 代码简洁,一目了然。
先定义,后动态填充 声明后初始化 String[] arr = new String[5]; 灵活性高,适合运行时确定长度和内容的情况。
需要打印数组内容 Arrays.toString() System.out.println(Arrays.toString(arr)); 输出格式清晰,便于调试。
需要排序数组 Arrays.sort() Arrays.sort(arr); 提供了高效的排序算法。
需要动态添加/删除元素 转换为 ArrayList List<String> list = new ArrayList<>(Arrays.asList(arr)); List 接口更强大,是日常开发的首选。

核心要点:

Java中如何定义string数组?-图3
(图片来源网络,侵删)
  1. String[] vs List<String>:数组长度固定,List 长度可变,除非有特殊性能要求或需要与只能接收数组作为参数的旧 API 交互,否则在 Java 代码中优先使用 List
  2. null 的处理String 数组的默认值是 null,在使用数组元素前,最好进行 null 检查,避免 NullPointerException
  3. 遍历方式:对于简单的遍历,推荐使用 for-each 循环,代码更简洁且不易出错,如果需要索引,则使用传统的 for 循环。
分享:
扫描分享到社交APP
上一篇
下一篇