1. Stringmảng

Tôi muốn cung cấp cho bạn một cái nhìn tổng quan ngắn gọn về Stringmảng.

Như chúng ta đã nói trước đây, một mảng có thể thuộc bất kỳ kiểu nào. Điều này có nghĩa là bạn có thể tạo một mảng gồm Strings. Nếu chúng ta muốn viết một chương trình "đọc 10 dòng từ bàn phím và hiển thị chúng theo thứ tự ngược lại", thì đây là mã sẽ như thế nào:

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]);
}
Tạo Scannerđối tượng
Tạo đối tượng mảng 10 phần tử
Lặp từ 0 đến 9

Đọc chuỗi từ bàn phím và lưu vào ô tiếp theo của mảng
Lặp từ 9 đến 0

Hiển thị ô tiếp theo trong mảng

Mã hầu như không thay đổi! Chúng tôi chỉ phải thay thế intbằng Stringkhi tạo mảng. Chà, và khi đọc chuỗi từ bàn phím, chúng tôi cũng đã thay thế nextInt()phương thức bằng nextLine().


2. Stringmảng trong bộ nhớ

Và một thực tế hữu ích nữa. Hãy xem xét 3 hình ảnh:

Hình 1.String Cách sắp xếp một đối tượng trong bộ nhớ:

Mảng chuỗi trong bộ nhớ

Hình ảnh này được lấy từ các bài học trước.

Xin lưu ý rằng văn bản của chuỗi không được lưu trữ trực tiếp trong biến: một khối bộ nhớ riêng được phân bổ cho nó. Một Stringbiến lưu trữ địa chỉ (tham chiếu) đến một đối tượng lưu trữ văn bản.

Hình 2. Cách sắp xếp một mảng số nguyên trong bộ nhớ:

Mảng chuỗi trong bộ nhớ 2

Hình ảnh này cũng quen quen.

Hình 3. Cách sắp xếp một mảng chuỗi trong bộ nhớ:

Cách một mảng Chuỗi được sắp xếp trong bộ nhớ

Ở bên trái, chúng ta thấy một biến mảng có kiểu là String[](nó lưu địa chỉ của một đối tượng mảng).

Ở giữa, chúng ta có Stringđối tượng mảng.

Và bên phải là các đối tượng chuỗi lưu trữ một số văn bản.

Các ô của Stringmảng không tự lưu trữ các chuỗi (văn bản của các đối tượng Chuỗi). Thay vào đó, họ lưu trữ địa chỉ của họ (tham chiếu đến họ). Cũng giống như cách Stringcác biến lưu trữ địa chỉ của các đối tượng chuỗi (nơi lưu trữ văn bản).

Hãy cân nhắc điều này khi bạn so sánh các ô trong mảng:

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]);
Tạo một mảng gồm 10 chuỗi

Đặt các giá trị vào mảng



true (các tham chiếu bằng nhau)
false (các tham chiếu không bằng nhau)
true (các chuỗi bằng nhau)
true(các chuỗi vẫn bằng nhau)


3. Khởi tạo mảng nhanh trong Java

Mảng cực kỳ hữu ích, vì vậy những người tạo ra Java đã cố gắng làm việc với chúng thuận tiện nhất có thể.

Điều đầu tiên họ làm là đơn giản hóa quá trình khởi tạo mảng, quy trình mà bạn cung cấp các giá trị ban đầu của một mảng.

Rốt cuộc, ngoài dữ liệu được đọc từ đâu đó, một chương trình cũng thường cần dữ liệu nội bộ của chính nó để hoạt động. Ví dụ: giả sử chúng ta cần lưu trữ độ dài của mỗi tháng trong một mảng. Đây là những gì mã có thể trông giống như:

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

Nhưng nhờ những người tạo ra Java, có một cách để viết điều này ngắn gọn hơn:

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

Bạn chỉ cần liệt kê tất cả các giá trị của mảng, phân tách bằng dấu phẩy!

Thuận tiện, phải không? Nhưng đó không phải là tất cả.

Khi nó xảy ra, trình biên dịch có thể xác định loại vùng chứa (đối tượng mảng) dựa trên loại giá trị của mảng. Và để xác định độ dài của mảng, bạn chỉ cần đếm số phần tử được viết trong dấu ngoặc nhọn.

Điều đó có nghĩa là mã này có thể được viết ngắn hơn nữa:

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

Một điều của vẻ đẹp, phải không? 🙂

Điều này được gọi là "khởi tạo mảng nhanh". Nhân tiện, điều này hoạt động với các loại khác ngoài int...

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