1. Mảng trong bộ nhớ
Trong các ví dụ trước, hình minh họa có một chút không chính xác.
Khi tạo mảng (như khi tạo chuỗi), hai khối bộ nhớ riêng biệt được phân bổ: một khối để lưu chính mảng (vùng chứa) và khối thứ hai dành cho biến lưu địa chỉ của nó . Hình ảnh dưới đây thể hiện sự làm rõ này:
Bộ nhớ được phân bổ cho mảng các 10
int
phần tử và int[]
biến lưu trữ địa chỉ của int
mảng, được hiển thị bằng màu xanh lá cây.
Để so sánh, một int
biến thông thường lưu trữ giá trị 199
được hiển thị bằng màu xanh lam.
Điều này gợi nhớ một chút về việc lưu trữ các chuỗi trong bộ nhớ, bạn có nghĩ vậy không?
Đúng vậy, dây. Và giống như khi bạn làm việc với các chuỗi, bạn có thể gán các biến mảng cho nhau:
Mã số | Giải trình |
---|---|
|
Tạo một mảng 10 int các phần tử. Gán giá trị 4 cho ô có chỉ mục 2 . Gán giá trị 9 cho ô có chỉ mục 7 . Trong b biến lưu địa chỉ lưu trong a biến. Bây giờ a và b trỏ đến cùng một đối tượng mảng trong bộ nhớ. Trong ô của đối tượng mảng có chỉ số 9 , viết tổng các giá trị được lưu trữ trong các ô 2 (lưu trữ giá trị 4 ) và 7 (lưu trữ giá trị 9 ). |
Đối tượng mảng vẫn ở đúng vị trí của nó và các biến a
và b
lưu trữ cùng một địa chỉ (tham chiếu) cho cùng một đối tượng. Nhìn vào bức tranh:

2. Chi tiết hơn về cách làm việc với mảng
Bạn có thể tạo một mảng các phần tử thuộc bất kỳ loại nào. Để làm điều này, chỉ cần viết dấu ngoặc vuông sau tên loại. Nói chung, việc tạo một mảng trông như thế này:
type[] name = new type[number];
Trong đó kiểu là kiểu của các phần tử mà chúng ta sẽ lưu trữ trong mảng. Tên là tên của biến mà chúng ta sẽ sử dụng để chỉ mảng và số là số lượng ô trong mảng.
Ví dụ trên là dạng chuẩn để tạo một biến mảng và đối tượng mảng. Trong thực tế, đây là hai thực thể riêng biệt.
Bạn có thể tạo biến mảng riêng biệt với đối tượng mảng:
type[] name;
name = new type[number];
Và một điểm nữa không hề nhỏ:
Ví dụ:
Mã số | Giải trình |
---|---|
|
Tạo một mảng n các phần tử |
|
Tạo một mảng với 203 các phần tử |
|
|
0..99
một
ArrayIndexOfBoundException
, nghĩa là chỉ mục nằm ngoài giới hạn của mảng.
3. Độ dài mảng
Như bạn đã thấy trong ví dụ trước, bạn có thể tự tạo một biến mảng và sau đó gán một giá trị (tham chiếu đến một đối tượng mảng) cho nó ở đâu đó trong mã. Bạn thậm chí có thể làm điều này:
Mã số | Giải trình |
---|---|
|
Tạo một biến mảng có kiểu int[] Nếu a biến nhỏ hơn 10 , thì hãy tạo một mảng 10 các phần tử. Nếu không thì tạo một mảng 20 các phần tử |
Và bây giờ bạn có thể làm gì khác với một mảng như vậy? Làm thế nào để bạn biết có bao nhiêu yếu tố trong đó?
Để giải quyết vấn đề này, các mảng có một thuộc tính (biến) đặc biệt có tên là length
. Bạn có thể tìm độ dài của một mảng bằng cách sử dụng biểu thức này:
array.length;
Đây array
là tên của biến mảng và length
là tên thuộc tính của mảng. Giá trị của length
thuộc tính không thể thay đổi: length
bản thân thuộc tính có thể được gán cho các biến khác, nhưng không thể gán gì cho nó (nếu bạn cố làm điều này, chương trình sẽ không biên dịch được).
Chúng ta có thể tiếp tục với ví dụ trước như thế này:
Mã số | Giải trình |
---|---|
|
Tạo một biến mảng có kiểu int[] Nếu a biến nhỏ hơn 10 , thì hãy tạo một mảng 10 các phần tử. Nếu không, hãy tạo một mảng 20 các phần tử Lặp lại tất cả các phần tử của mảng: từ 0 đến độ dàiarray.length - 1 |
4. Tổng hợp kiến thức về mảng trong Java
Hãy tóm tắt lại những gì chúng ta biết về mảng:
Sự thật 1. Một mảng bao gồm nhiều ô.
Sự thật 2. Bạn truy cập một ô cụ thể bằng cách sử dụng số (chỉ mục) của nó.
Sự thật 3. Tất cả các ô đều cùng loại.
Sự thật 4. Giá trị ban đầu của tất cả các ô là 0 (nếu ô lưu trữ số), null
(nếu ô lưu trữ tham chiếu đối tượng) hoặc false
(nếu ô lưu trữ boolean
giá trị). Bạn sẽ tìm hiểu thêm về các giá trị mặc định trong chương này .
Sự thật 5. String[] list
chỉ là khai báo của một biến. Điều này không tự tạo vùng chứa (đối tượng mảng). Để sử dụng biến, trước tiên bạn cần tạo một mảng (vùng chứa) và gán nó cho biến. Xem ví dụ dưới đây.
Sự thật 6. Khi chúng ta tạo một đối tượng mảng (vùng chứa), chúng ta phải chỉ ra độ lớn của nó, tức là nó chứa bao nhiêu ô. Điều này được thực hiện với một tuyên bố như: new TypeName[n]
;
Sự thật 7. Độ dài của một mảng có thể được tìm thấy bằng cách sử dụng .length
thuộc tính.
Sự thật 8. Sau khi tạo một mảng, bạn không thể thay đổi loại phần tử của nó hoặc số lượng phần tử mà nó lưu trữ.
Mã số | Giải trình |
---|---|
|
s là null list _null |
|
Biến list lưu trữ một tham chiếu đến một đối tượng: một mảng chuỗi bao gồm 10 các phần tử. n là10 |
|
Bây giờ |
|
Một ngoại lệ (lỗi chương trình) sẽ được ném ra, tức là chương trình sẽ bị lỗi. list lưu trữ một tham chiếu đếnnull |
|
Một ngoại lệ mảng ngoài giới hạn (lỗi chương trình) sẽ được tạo. Nếu a list lưu trữ 10 các phần tử/ô, thì các chỉ số hợp lệ là: 0 1 2 3 4 5 6 7 8 9 — 10 phần tử. |
GO TO FULL VERSION