杰瑞科技汇

Java new数组后如何正确初始化?

核心概念

在 Java 中,数组是一个对象,要创建一个数组对象,你需要两步:

Java new数组后如何正确初始化?-图1
(图片来源网络,侵删)
  1. 声明数组变量:告诉编译器你打算使用一个数组变量来存储数组引用。
  2. 创建数组对象:使用 new 关键字在内存中为数组分配空间,并将其引用赋值给之前声明的变量。

声明数组变量

在创建数组之前,你需要先声明它,有三种常见的声明方式,它们在功能上是等价的:

// 方式一:推荐,数据类型[] 数组名
int[] numbers; 
// 方式二:C/C++ 风格,数据类型 数组名[]
int numbers2[];
// 方式三:声明并直接初始化
int[] numbers3 = {1, 2, 3};

注意:在 Java 中,推荐使用 数据类型[] 数组名 的方式,因为它更能表明 numbers 是一个 int 类型的数组,而不是一个 int 类型的变量。


使用 new 关键字创建和初始化数组

new 关键字用于为数组分配内存空间,初始化数组主要有以下几种方式。

声明后,再创建并分配大小(最常用)

这种方式先声明数组,然后用 new 指定数组长度,系统会自动为每个元素赋予默认值。

Java new数组后如何正确初始化?-图2
(图片来源网络,侵删)

语法: 数组变量 = new 数据类型[数组长度];

示例:

// 1. 声明一个整型数组
int[] scores;
// 2. 使用 new 创建一个长度为 5 的数组,并分配默认值
// 数组长度一旦确定,就不能再改变
scores = new int[5]; 
// scores 数组的内容是:
// [0, 0, 0, 0, 0]
// int 类型的默认值是 0

不同数据类型的默认值:

数据类型 默认值
byte, short, int, long 0
float, double 0
char '\u0000' (空字符)
boolean false
引用类型 (如 String, Object) null

示例(其他数据类型):

// 创建一个 String 数组,长度为 3
String[] names = new String[3];是: [null, null, null]
// 创建一个 boolean 数组,长度为 4
boolean[] flags = new boolean[4];是: [false, false, false, false]

声明、创建和初始化一步完成(推荐)

这是更简洁、更常用的写法,将声明和 new 操作放在一行。

语法: 数据类型[] 数组变量 = new 数据类型[数组长度];

示例:

// 创建一个长度为 3 的字符串数组
String[] fruits = new String[3];
// fruits 数组的内容是:
// [null, null, null]
// 你可以通过索引为每个元素赋值
fruits[0] = "Apple";
fruits[1] = "Banana";
fruits[2] = "Orange";
// fruits 的内容是:
// ["Apple", "Banana", "Orange"]

创建数组并同时指定初始值

如果你在创建数组时就知道了它的所有元素,可以使用这种更便捷的方式,这种方式不需要显式指定数组长度,因为编译器会根据你提供的初始值列表自动计算。

语法: 数据类型[] 数组变量 = new 数据类型[]{元素1, 元素2, ..., 元素N};

注意:在这种写法中,new 数据类型[] 中的 [] 不能写数字(即不能指定长度)。

示例:

// 创建一个包含 3 个元素的 int 数组
int[] numbers = new int[]{10, 20, 30};
// 创建一个包含 4 个元素的 String 数组
String[] cities = new String[]{"北京", "上海", "广州", "深圳"};
// 系统会自动确定数组的长度
// numbers.length 的值是 3
// cities.length 的值是 4

简化写法(类型推断 - Java 7+)

如果你在创建数组时已经提供了初始值列表,可以使用这种更简化的写法,省略 new 数据类型[]

语法: 数据类型[] 数组变量 = {元素1, 元素2, ..., 元素N};

示例:

// 这是最简洁的初始化方式
int[] primes = {2, 3, 5, 7, 11, 13};
String[] weekdays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
// 等同于
int[] primes2 = new int[]{2, 3, 5, 7, 11, 13};

重要提示:这种简化的初始化方式只能在声明变量的同一行使用,如果你先声明了变量,再想用这种方式初始化,会编译错误。

int[] scores;
scores = {90, 85, 88}; // 编译错误!
// 正确的做法是:
scores = new int[]{90, 85, 88};

总结与对比

方式 语法 说明 适用场景
分配大小 int[] arr = new int[5]; 创建数组,指定长度,元素为默认值。 数组长度已知,但初始值稍后确定。
指定初始值 int[] arr = new int[]{1, 2, 3}; 创建数组并指定所有初始值。 数组长度和初始值在创建时都已知。
简化写法 int[] arr = {1, 2, 3}; (推荐) 创建数组并指定初始值的最简方式。 数组长度和初始值在创建时都已知,代码更简洁。

访问和修改数组元素

数组通过索引来访问或修改其元素,索引从 0 开始。

// 创建并初始化一个数组
int[] scores = new int[3];
// 修改元素
scores[0] = 95; // 修改第一个元素
scores[1] = 88; // 修改第二个元素
scores[2] = 100; // 修改第三个元素
// 访问元素
int firstScore = scores[0]; // firstScore 的值是 95
System.out.println("第一个分数: " + firstScore);
// 获取数组长度
int length = scores.length; // length 的值是 3
System.out.println("数组长度: " + length);

多维数组初始化

new 也可以用来初始化多维数组(数组的数组)。

// 创建一个 3x4 的二维数组(3行4列)
int[][] matrix = new int[3][4];
// 创建一个不规则的二维数组
int[][] triangle = new int[3][]; // 只指定行数
triangle[0] = new int[1]; // 第1行有1个元素
triangle[1] = new int[2]; // 第2行有2个元素
triangle[2] = new int[3]; // 第3行有3个元素
// 或者直接初始化
int[][] anotherMatrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

希望这个详细的解释能帮助你完全理解 Java 中使用 new 初始化数组的方法!

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