基础概念:声明与创建
在深入具体方法前,先理解两个基本步骤。
a. 声明数组
这只是在内存中为数组引用分配了空间,但数组本身还未创建。
// 方式一:推荐,指定数组元素类型为 String,变量名为 myStrings String[] myStrings; // 方式二:也可行,效果与方式一完全相同 String myStrings[];
注意:虽然两种方式都有效,但在 Java 中,String[] myStrings; 是更常见和推荐的风格,因为它能清晰地表明 String[] 是一个整体类型(String 数组类型)。
b. 创建数组
这会在堆内存中实际分配空间来存储数组元素,并返回一个指向该内存空间的引用,创建时必须指定数组的大小(即能存放多少个元素)。
// 创建一个可以存放 5 个 String 元素的数组 myStrings = new String[5];
myStrings 数组已经创建,但它里面的元素是默认值,对于 String 数组,默认值是 null。
System.out.println(myStrings[0]); // 输出: null System.out.println(myStrings.length); // 输出: 5
初始化 String 数组的主要方法
初始化就是指在创建数组的同时,为其赋予初始值。
分步声明、创建和赋值(最基础)
这是最基础、最清晰的方式,适合初学者理解整个过程。
// 1. 声明
String[] fruits;
// 2. 创建并赋值
fruits = new String[]{"Apple", "Banana", "Cherry", "Date"};
// 或者,先创建,再逐个赋值
String[] languages;
languages = new String[3];
languages[0] = "Java";
languages[1] = "Python";
languages[2] = "C++";
声明并初始化(一行完成)
这是最常用、最简洁的方式,可以在声明的同时直接为数组元素赋值。
a. 使用花括号 推断大小
// 编译器会自动计算出数组的大小为 4
String[] colors = {"Red", "Green", "Blue", "Yellow"};
// 访问数组元素
System.out.println(colors[0]); // 输出: Red
System.out.println(colors.length); // 输出: 4
注意:这种方式不能在先声明后使用,否则会编译错误。
// 错误示例!
String[] cities;
cities = {"Beijing", "Shanghai", "Guangzhou"}; // 编译错误: 数组创建时必须使用 new
正确的后续赋值方式是:
String[] cities;
cities = new String[]{"Beijing", "Shanghai", "Guangzhou"}; // 正确
b. 使用 new 关键字显式创建
这种方式与方法二a效果相同,只是写法上更明确地使用了 new 关键字。
String[] planets = new String[]{"Mercury", "Venus", "Earth", "Mars"};
特殊情况:初始化一个空数组
有时你需要一个数组,但一开始不知道里面要放什么内容,或者暂时为空。
a. 创建一个长度为 0 的数组
这种方式创建的数组在内存中是存在的,但它没有任何元素。
String[] emptyArray1 = new String[0];
System.out.println(emptyArray1.length); // 输出: 0
// 你也可以用简写方式
String[] emptyArray2 = {};
System.out.println(emptyArray2.length); // 输出: 0
这种数组在某些场景下很有用,比如作为方法的返回值,表示“没有找到任何结果”。
b. 创建一个包含 null 的数组
这与方法一提到的默认值不同,它创建了一个长度为 1 的数组,其唯一的元素是 null。
String[] nullArray = {null};
System.out.println(nullArray.length); // 输出: 1
System.out.println(nullArray[0]); // 输出: null
将 ArrayList 转换为 String[]
在实际开发中,你更可能从一个动态的 ArrayList 得到字符串数组,转换方法如下:
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayConversion {
public static void main(String[] args) {
ArrayList<String> stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");
stringList.add("Java");
// 方法1:使用 toArray(T[] array) - 推荐方式
// 创建一个与 ArrayList 大小相同的空数组,作为 toArray 方法的参数
String[] array1 = stringList.toArray(new String[0]);
System.out.println("方法1: " + Arrays.toString(array1)); // 输出: [Hello, World, Java]
// 方法2:使用流 (Java 8+)
String[] array2 = stringList.stream().toArray(String[]::new);
System.out.println("方法2: " + Arrays.toString(array2)); // 输出: [Hello, World, Java]
}
}
注意:Arrays.toString() 是一个非常有用的工具,可以方便地打印数组的内容,而不是内存地址。
总结与最佳实践
| 场景 | 推荐代码 | 说明 |
|---|---|---|
| 已知所有初始值 | String[] arr = {"A", "B", "C"}; |
最常用、最简洁,一行完成声明和初始化。 |
| 声明和初始化分开 | String[] arr; arr = new String[]{"A", "B"}; |
逻辑清晰,适合在声明和赋值之间有其他代码的情况。 |
| 创建空数组(无元素) | String[] arr = {}; |
表示一个空的、长度为 0 的数组。 |
从 ArrayList 转换 |
String[] arr = list.toArray(new String[0]); |
标准且高效的转换方式。 |
| 打印数组内容 | System.out.println(Arrays.toString(arr)); |
调试和查看数组内容的必备工具。 |
核心要点:
- 声明:
String[] myArray; - 创建并初始化:
myArray = new String[]{"val1", "val2"};或简写为String[] myArray = {"val1", "val2"}; - 空数组和
null数组是不同的概念,根据业务需求选择。 - 善用
Arrays.toString()来查看数组内容。
