1.String
数组
我想给你一个关于String
数组的简要概述。
正如我们之前所说,数组可以是任何类型。这意味着您可以创建一个 s 数组String
。如果我们想编写一个“从键盘读取 10 行并以相反顺序显示它们”的程序,代码如下所示:
|
创建一个Scanner 对象创建一个 10 元素数组对象 Loop from 0 to 9 从键盘读取一个字符串并将其保存在数组的下一个单元格 Loop from 9 to 0 显示数组中的下一个单元格 |
代码几乎没有改变!我们只需要在创建数组时替换int
为。String
好吧,当从键盘读取字符串时,我们也将nextInt()
方法替换为nextLine()
.
2.String
内存中的数组
还有一个更有用的事实。让我们考虑3张图片:
图 1.String
对象在内存中的排列方式:
这张照片是从以前的课程中拍摄的。
请注意,字符串的文本不直接存储在变量中:为其分配了一个单独的内存块。变量String
存储存储文本的对象的地址(引用)。
图 2.整数数组在内存中的排列方式:
这画面也是似曾相识。
图 3.字符串数组在内存中的排列方式:
在左边我们看到一个数组变量,它的类型是String[]
(它存储一个数组对象的地址)。
在中间,我们有String
数组对象本身。
右边是存储一些文本的字符串对象。
数组的单元格String
不存储字符串本身(String 对象的文本)。相反,他们存储他们的地址(对他们的引用)。String
与变量存储字符串对象地址(存储文本的位置)的方式相同。
比较数组单元格时请考虑这一点:
|
创建一个包含 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"};
GO TO FULL VERSION