杰瑞科技汇

Java数组初始化有几种方式?

Java 数组的初始化主要分为两大类:

Java数组初始化有几种方式?-图1
(图片来源网络,侵删)
  1. 静态初始化:在创建数组时,就明确指定数组的内容。
  2. 动态初始化:在创建数组时,只指定数组的长度,然后由程序后续为每个元素赋值。

静态初始化

静态初始化是指在定义数组的同时,为数组的每个元素分配内存空间并赋值,这种方式简单直观,适用于元素已知且数量较少的情况。

语法格式

有两种常见的静态初始化语法:

推荐使用(类型推断)

// 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
int[] numbers = new int[]{1, 2, 3, 4, 5};

注意:在这种格式中,new int[] 中的 [] 必须包含,它表示你要创建的是一个数组。

Java数组初始化有几种方式?-图2
(图片来源网络,侵删)

简写形式(最常用)

// 数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
String[] names = {"Alice", "Bob", "Charlie"};
double[] prices = {19.99, 29.50, 10.00};

这种简写方式非常流行,因为它更简洁,Java 编译器会自动处理 new 数组的部分。

示例代码

public class StaticInitialization {
    public static void main(String[] args) {
        // 格式一
        int[] scores = new int[]{100, 85, 92, 78};
        System.out.println("第一个学生的分数: " + scores[0]); // 输出: 100
        // 格式二(推荐)
        String[] cities = {"北京", "上海", "广州", "深圳"};
        System.out.println("第一个城市: " + cities[0]); // 输出: 北京
        // 遍历数组
        System.out.println("所有城市:");
        for (String city : cities) {
            System.out.println(city);
        }
    }
}

动态初始化

动态初始化是指先为数组分配指定长度的内存空间,此时数组中的每个元素都会被赋予一个默认值,之后,我们再通过索引(下标)为每个元素赋值。

语法格式

// 数据类型[] 数组名 = new 数据类型[数组长度];

关键点

Java数组初始化有几种方式?-图3
(图片来源网络,侵删)
  • 数组长度:必须是整数,指定了数组可以存储多少个元素。
  • 默认值:在动态初始化后,数组元素会被自动赋予默认值:
    • 整数类型 (byte, short, int, long): 0
    • 浮点类型 (float, double): 0
    • 字符类型 (char): '\u0000' (空字符)
    • 布尔类型 (boolean): false
    • 引用类型 (如 String, 对象): null

示例代码

public class DynamicInitialization {
    public static void main(String[] args) {
        // 创建一个长度为 5 的 int 类型数组
        int[] grades = new int[5];
        // 查看初始化后的默认值
        System.out.println("初始化后的数组元素:");
        for (int i = 0; i < grades.length; i++) {
            System.out.println("grades[" + i + "] = " + grades[i]);
        }
        // 输出:
        // grades[0] = 0
        // grades[1] = 0
        // grades[2] = 0
        // grades[3] = 0
        // grades[4] = 0
        // 通过索引为元素赋值
        grades[0] = 95;
        grades[1] = 88;
        grades[2] = 76;
        grades[3] = 100;
        grades[4] = 89;
        System.out.println("\n赋值后的数组元素:");
        for (int grade : grades) {
            System.out.println(grade);
        }
        // 输出:
        // 95
        // 88
        // 76
        // 100
        // 89
    }
}

多维数组初始化

多维数组可以看作是“数组的数组”,最常见的二维数组初始化方式如下。

静态初始化

// 方式一
int[][] matrix1 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 方式二(简写)
int[][] matrix2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

动态初始化

// 创建一个 3x4 的二维数组(3行4列)
int[][] table = new int[3][4];
// 创建一个不规则的二维数组(行数固定,每行的列数不同)
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[2]; // 第一行有2个元素
jaggedArray[1] = new int[4]; // 第二行有4个元素
jaggedArray[2] = new int[3]; // 第三行有3个元素

Arrays.toString() 的使用

直接打印数组变量(如 System.out.println(numbers);)会得到类似 [I@15db9742 的输出,这是数组的内存地址,没有实际意义,为了方便地查看数组内容,Java 提供了 java.util.Arrays 工具类。

import java.util.Arrays;
public class ArrayToStringExample {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30, 40, 50};
        // 使用 Arrays.toString() 将数组转换为易读的字符串
        System.out.println(Arrays.toString(numbers));
        // 输出: [10, 20, 30, 40, 50]
    }
}

对于二维数组,可以使用 Arrays.deepToString()

import java.util.Arrays;
public class ArrayDeepToStringExample {
    public static void main(String[] args) {
        int[][] matrix = {{1, 2}, {3, 4}};
        System.out.println(Arrays.deepToString(matrix));
        // 输出: [[1, 2], [3, 4]]
    }
}

总结与最佳实践

特性 静态初始化 动态初始化
定义 创建时指定所有元素 创建时指定长度,后续赋值
语法 int[] a = {1, 2, 3};int[] a = new int[]{1, 2, 3}; int[] a = new int[3];
适用场景 元素已知且数量少 元素数量已知但值未知,或值由程序逻辑计算得出
默认值 无(直接赋值) 有(int为0, String为null等)

最佳实践建议:

  1. 优先使用静态初始化:如果你在写代码时就已经知道数组里要放什么,直接使用简写的静态初始化 ,代码更清晰。
  2. 使用动态初始化:如果数组的元素需要通过循环、计算或从文件/数据库中读取才能确定,那么就应该使用动态初始化。
  3. 牢记默认值:在使用动态初始化时,要清楚不同数据类型的默认值,避免因忘记初始化而导致的 NullPointerException 或逻辑错误(以为 int 数组元素是 0 但实际没有赋值)。
  4. 使用 Arrays.toString():在调试或打印数组内容时,养成使用 Arrays.toString() 的好习惯。
分享:
扫描分享到社交APP
上一篇
下一篇