杰瑞科技汇

Java如何给String数组正确赋值?

核心概念

要理解 Java 数组的两个基本操作:

  1. 声明数组: 告诉编译器你想要一个 String 类型的数组,此时数组还未被创建,也没有分配内存。
    String[] names; // 推荐方式
    // 或者
    String names[]; // 也可以,但不推荐,容易混淆
  2. 创建/初始化数组: 使用 new 关键字为数组分配内存空间,并指定其长度,数组中的每个元素都会被赋予一个默认值(对于 String 类型,默认值是 null)。
    names = new String[3]; // 创建一个可以存放3个String的数组
    // names 的内容是: [null, null, null]

赋值就是给已经创建好的数组中的各个元素存入具体的 String 值。


声明、创建、然后逐个赋值

这是最基础、最直观的方法,适合初学者理解整个过程。

步骤:

  1. 声明数组。
  2. 使用 new 创建数组并指定长度。
  3. 通过索引(从 0 开始)为数组的每个元素赋值。

代码示例:

public class StringArrayExample {
    public static void main(String[] args) {
        // 1. 声明一个 String 数组
        String[] fruits;
        // 2. 创建数组,指定长度为 3
        fruits = new String[3];
        // 3. 通过索引为每个元素赋值
        fruits[0] = "Apple";
        fruits[1] = "Banana";
        fruits[2] = "Cherry";
        // 打印数组内容
        System.out.println(fruits[0]); // 输出: Apple
        System.out.println(fruits[1]); // 输出: Banana
        System.out.println(fruits[2]); // 输出: Cherry
    }
}

声明、创建并初始化(一步完成)

这是最常用、最简洁的初始化方式,可以在声明数组的同时就为其赋值。

语法:

String[] arrayName = { value1, value2, value3, ... };

代码示例:

public class StringArrayExample2 {
    public static void main(String[] args) {
        // 在一行代码中完成声明、创建和初始化
        String[] cities = { "Beijing", "Shanghai", "Guangzhou", "Shenzhen" };
        // 打印整个数组
        // Arrays.toString() 是一个工具方法,可以方便地打印数组内容
        System.out.println(Arrays.toString(cities)); // 输出: [Beijing, Shanghai, Guangzhou, Shenzhen]
        // 访问单个元素
        System.out.println("The first city is: " + cities[0]); // 输出: The first city is: Beijing
    }
}

注意: 使用这种方式时,无需(也不能)使用 new 和指定长度,编译器会自动根据 中的元素个数来确定数组长度。


使用 new 关键字进行初始化

这种方法与方法二类似,但显式地使用了 new 关键字,在某些情况下,这种写法可能更清晰,尤其是在创建一个空数组或需要明确表达“创建”这个动作时。

语法:

String[] arrayName = new String[] { value1, value2, value3, ... };

代码示例:

public class StringArrayExample3 {
    public static void main(String[] args) {
        // 显式使用 new 关键字进行初始化
        String[] programmingLanguages = new String[] { "Java", "Python", "C++", "JavaScript" };
        System.out.println(Arrays.toString(programmingLanguages)); // 输出: [Java, Python, C++, JavaScript]
    }
}

重要区别: 这种 new 初始化的语法有一个非常重要的用途——可以在任何地方使用,而不只是在声明变量的那一行,在方法调用时直接传递一个新数组。

// 这是一个方法,它接收一个 String 数组
public static void printArray(String[] arr) {
    System.out.println(Arrays.toString(arr));
}
public static void main(String[] args) {
    // 在方法调用时直接创建并传递一个匿名数组
    printArray(new String[] { "Hello", "World" }); // 输出: [Hello, World]
}

而 的简写方式只能在声明变量时使用,不能用在其他地方,下面的代码是错误的:

// 错误的写法
printArray({ "Hello", "World" }); // 编译会报错

使用 Arrays 工具类(Java 8+)

如果你需要创建一个由特定值填充的数组,可以使用 java.util.Arrays 类中的 fill 方法。

代码示例:

import java.util.Arrays;
public class StringArrayExample4 {
    public static void main(String[] args) {
        // 1. 创建一个指定长度的数组
        String[] emptyArray = new String[5];
        // 2. 使用 Arrays.fill() 将所有元素填充为 "Unknown"
        Arrays.fill(emptyArray, "Unknown");
        System.out.println(Arrays.toString(emptyArray)); // 输出: [Unknown, Unknown, Unknown, Unknown, Unknown]
        // 3. 也可以填充数组的某个范围
        String[] partialArray = new String[5];
        Arrays.fill(partialArray, 1, 4, "Filled"); // 从索引 1 (包含) 到 4 (不包含) 填充
        System.out.println(Arrays.toString(partialArray)); // 输出: [null, Filled, Filled, Filled, null]
    }
}

使用 Java 8+ Stream API(高级用法)

对于更复杂的数组创建场景,比如从一个集合转换而来,或者使用函数式风格生成,可以使用 Stream API。

代码示例:

import java.util.Arrays;
import java.util.stream.Stream;
public class StringArrayExample5 {
    public static void main(String[] args) {
        // 1. 从一个 Stream 创建数组
        String[] fromStream = Stream.of("A", "B", "C").toArray(String[]::new);
        System.out.println("From Stream: " + Arrays.toString(fromStream)); // 输出: From Stream: [A, B, C]
        // 2. 从一个 List 转换为数组
        java.util.List<String> list = Arrays.asList("Apple", "Orange", "Grape");
        String[] fromList = list.toArray(new String[0]);
        System.out.println("From List: " + Arrays.toString(fromList)); // 输出: From List: [Apple, Orange, Grape]
    }
}

总结与对比

方法 语法 适用场景 特点
方法一 arr = new String[n]; arr[0] = "val"; 需要在程序运行时动态决定数组长度和值。 最基础,步骤清晰,但代码稍长。
方法二 String[] arr = { "val1", "val2" }; 最常用,在声明时就已知所有元素。 简洁、高效,是 Java 最推荐的初始化方式。
方法三 String[] arr = new String[] { "val1", "val2" }; 需要显式使用 new,或作为方法参数传递匿名数组。 功能与方法二相同,但更灵活,可用于方法参数。
方法四 Arrays.fill(arr, "value"); 需要将数组所有或部分元素填充为同一个值。 适合批量赋值,代码简洁。
方法五 Stream.of(...).toArray(...) 从集合、Stream 或其他数据源转换生成数组,或进行复杂操作。 功能强大,适合函数式编程风格,是 Java 8+ 的特性。

对于日常开发,方法二和方法三 是最需要掌握和频繁使用的。

分享:
扫描分享到社交APP
上一篇
下一篇