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"};