1.String数组

我想给你一个关于String数组的简要概述。

正如我们之前所说,数组可以是任何类型。这意味着您可以创建一个 s 数组String。如果我们想编写一个“从键盘读取 10 行并以相反顺序显示它们”的程序,代码如下所示:

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
创建一个Scanner对象
创建一个 10 元素数组对象
Loop from 0 to 9

从键盘读取一个字符串并将其保存在数组的下一个单元格
Loop from 9 to 0

显示数组中的下一个单元格

代码几乎没有改变!我们只需要在创建数组时替换int为。String好吧,当从键盘读取字符串时,我们也将nextInt()方法替换为nextLine().


2.String内存中的数组

还有一个更有用的事实。让我们考虑3张图片:

图 1.String对象在内存中的排列方式:

内存中的字符串数组

这张照片是从以前的课程中拍摄的。

请注意,字符串的文本不直接存储在变量中:为其分配了一个单独的内存块。变量String存储存储文本的对象的地址(引用)。

图 2.整数数组在内存中的排列方式:

内存中的字符串数组 2

这画面也是似曾相识。

图 3.字符串数组在内存中的排列方式:

String数组在内存中的排列方式

在左边我们看到一个数组变量,它的类型是String[](它存储一个数组对象的地址)。

在中间,我们有String数组对象本身。

右边是存储一些文本的字符串对象。

数组的单元格String不存储字符串本身(String 对象的文本)。相反,他们存储他们的地址(对他们的引用)。String与变量存储字符串对象地址(存储文本的位置)的方式相同。

比较数组单元格时请考虑这一点:

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
创建一个包含 10 个字符串的数组

将值放入数组中



true (引用相等)
false (引用不相等)
true(字符串相等)
true(字符串仍然相等)


3. Java中的快速数组初始化

数组非常有用,因此 Java 的创建者试图尽可能方便地使用它们。

他们做的第一件事是简化数组初始化,即提供数组初始值的过程。

毕竟,除了从某处读取数据外,程序还经常需要自己的内部数据才能工作。例如,假设我们需要将每个月的长度存储在一个数组中。这就是代码的样子:

int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December

但感谢 Java 的创造者,有一种方法可以更简洁地编写它:

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

您可以简单地列出数组的所有值,以逗号分隔!

方便吧?但这还不是全部。

碰巧的是,编译器可以根据数组值的类型来确定容器(数组对象)的类型。并且为了确定数组的长度,计算写在花括号中的元素的数量是微不足道的。

这意味着这段代码可以写得更短:

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

一件美事,不是吗?🙂

这称为“快速数组初始化”。顺便说一句,这适用于int...以外的类型

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};