杰瑞科技汇

Java String数组如何正确赋值?

在声明时直接初始化(最常用)

这是最直接、最简洁的方式,在创建数组的同时,就为其指定初始值。

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

语法:

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

示例:

public class Main {
    public static void main(String[] args) {
        // 创建一个包含3个元素的String数组,并直接赋值
        String[] fruits = { "Apple", "Banana", "Orange" };
        // 打印数组内容
        System.out.println(fruits[0]); // 输出: Apple
        System.out.println(fruits[1]); // 输出: Banana
        System.out.println(fruits[2]); // 输出: Orange
        // 使用 for-each 循环遍历并打印整个数组
        System.out.println("所有水果:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

先声明,后初始化

如果你需要先声明数组变量,然后再确定其内容,可以分两步完成。

步骤 1:声明数组

只声明数组的类型和名称,此时数组是 null

步骤 2:初始化并赋值

使用 new 关键字创建数组,并指定大小,然后通过索引为每个元素赋值。

示例:

public class Main {
    public static void main(String[] args) {
        // 步骤 1: 声明一个 String 数组,fruits 是 null
        String[] fruits;
        // 步骤 2: 创建一个能容纳 3 个 String 元素的数组,并赋值给 fruits
        // 此时数组中的每个元素都是 null
        fruits = new String[3];
        // 通过索引为每个元素赋值
        fruits[0] = "Apple";
        fruits[1] = "Banana";
        fruits[2] = "Orange";
        // 打印数组内容
        System.out.println(fruits[0]); // 输出: Apple
        System.out.println(fruits[1]); // 输出: Banana
        System.out.println(fruits[2]); // 输出: Orange
    }
}

注意:在使用 new 分配内存后,数组的每个元素都会被赋予一个默认值,对于 String 这样的引用类型,默认值是 null,如果你尝试访问一个未赋值的元素(fruits[3]),会抛出 ArrayIndexOutOfBoundsException 异常。

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

使用 Arrays.copyOf()System.arraycopy() 复制数组

当你需要基于一个已存在的数组创建一个新数组时,这些方法非常有用。

Arrays.copyOf()

这个方法会创建一个新数组,并将原数组的内容复制过去,如果新数组的长度大于原数组,多余的元素会被填充默认值(Stringnull)。

示例:

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        String[] originalFruits = { "Apple", "Banana", "Orange" };
        // 创建一个长度为 5 的新数组,并复制 originalFruits 的内容
        String[] newFruits = Arrays.copyOf(originalFruits, 5);
        System.out.println("新数组内容: " + Arrays.toString(newFruits));
        // 输出: 新数组内容: [Apple, Banana, Orange, null, null]
    }
}

Arrays.toString() 是一个方便的方法,可以打印数组的字符串表示形式。

System.arraycopy()

这是一个底层方法,性能通常更好,但语法稍显复杂,它需要指定源数组、源起始位置、目标数组、目标起始位置和要复制的元素数量。

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

示例:

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        String[] source = { "A", "B", "C", "D" };
        String[] destination = new String[6]; // 目标数组必须已经分配好空间
        // 将 source 数组从索引 1 开始的 2 个元素 ("B", "C")
        // 复制到 destination 数组的索引 2 的位置
        System.arraycopy(source, 1, destination, 2, 2);
        System.out.println("目标数组内容: " + Arrays.toString(destination));
        // 输出: 目标数组内容: [null, null, B, C, null, null]
    }
}

使用 Arrays.fill() 填充数组

如果你想用一个特定的值填充整个数组或数组的某个部分,可以使用 Arrays.fill()

示例:

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        // 创建一个长度为 4 的 String 数组
        String[] status = new String[4];
        // 用 "Pending" 填充整个数组
        Arrays.fill(status, "Pending");
        System.out.println("填充后的数组: " + Arrays.toString(status));
        // 输出: 填充后的数组: [Pending, Pending, Pending, Pending]
        // 从索引 1 开始,填充 2 个元素为 "Approved"
        Arrays.fill(status, 1, 3, "Approved");
        System.out.println("部分填充后的数组: " + Arrays.toString(status));
        // 输出: 部分填充后的数组: [Pending, Approved, Approved, Pending]
    }
}

总结与最佳实践

方法 适用场景 优点 缺点
声明时直接初始化 在创建时就已知。 代码最简洁、可读性高。 不适合数组内容需要动态确定的情况。
先声明,后初始化 需要后续逻辑确定,或者需要先确定数组大小。 灵活性高。 代码步骤稍多。
Arrays.copyOf() 需要复制一个数组,并可能调整其大小。 使用方便,功能强大。 性能略低于 System.arraycopy
System.arraycopy() 需要在数组间进行高性能的复制,或进行部分复制。 性能最佳。 语法复杂,容易出错。
Arrays.fill() 需要将数组的所有或部分元素设置为同一个值。 专门为填充设计,使用方便。 功能单一,仅用于填充。

核心要点:

  1. 声明 vs. 初始化String[] names; 只是声明了一个变量,它还没有指向任何实际的数组对象。new String[3]; 才是真正的初始化,它在内存中分配了空间。
  2. 索引从 0 开始:Java 数组的索引总是从 0 开始,对于一个长度为 n 的数组,其有效索引范围是 0n-1
  3. 不可变性String 对象是不可变的,当你将一个 String 对象存入数组后,你无法改变这个 String 对象本身,但可以修改数组中某个索引位置所引用的 String 对象。

对于初学者和绝大多数日常开发场景,第一种(声明时直接初始化)和第二种(先声明后初始化) 是最需要掌握的核心方法。

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