Xem thêm

Kiểu tham trị và kiểu tham chiếu

Huy Erick
Khi chúng ta khai báo một biến kiểu tham trị (như int, double, char, v.v.), trình biên dịch sẽ cấp phát một vùng nhớ đủ lớn để chứa giá trị tương ứng. Ví dụ, khi...

Khi chúng ta khai báo một biến kiểu tham trị (như int, double, char, v.v.), trình biên dịch sẽ cấp phát một vùng nhớ đủ lớn để chứa giá trị tương ứng. Ví dụ, khi khai báo biến x kiểu int như sau:

int x;

Trình biên dịch sẽ phát sinh mã để cấp phát một vùng nhớ kích cỡ 4 byte (32 bit) cho biến x. Nếu gán giá trị cho x như sau:

x = 5;

Giá trị 5 sẽ được đặt trong vùng nhớ vừa được cấp phát. Đây là cách thức hoạt động của kiểu tham trị.

Khi chúng ta khai báo một biến kiểu tham chiếu (như String, array, class, ...) thì trình biên dịch sẽ cấp phát một vùng nhớ đủ lớn để chứa địa chỉ của vùng nhớ chứa giá trị của biến. Ví dụ, khi khai báo biến str kiểu String như sau:

String str; str = "Xin chào!";

Lúc này sẽ có hai vùng nhớ, một vùng nhớ chứa địa chỉ của vùng nhớ chứa giá trị "Xin chào!" và một vùng nhớ chứa giá trị "Xin chào!". Chúng ta có thể hình dung khái niệm này tương tự như khái niệm con trỏ trong ngôn ngữ C.

Bây giờ chúng ta sẽ khai báo thêm biến y kiểu int và gán x đến y:

int x; x = 5; int y; y = x; x++;

Lúc này biến y chứa một bản sao giá trị của biến x, những thay đổi của biến x (x++) sẽ không ảnh hưởng đến biến y.

Chúng ta cũng có thể khai báo thêm biến strref kiểu String như sau:

String str; str = "Xin chào!"; String strref; strref = str;

Lúc này hai vùng nhớ chứa địa chỉ của strrefstr sẽ chứa cùng địa chỉ - là địa chỉ của vùng nhớ chứa "Xin chào!". Có thể hình dung về kiểu tham chiếu và tham trị từ các ví dụ trên một cách trực quan.

Mảng là một danh sách chứa các phần tử có cùng kiểu dữ liệu. Mảng có thể có một chiều hay nhiều chiều.

Mảng một chiều

Mảng một chiều là một danh sách chứa các phần tử cùng kiểu, như số nguyên, chuỗi, v.v. Mỗi phần tử trong mảng được xác định tại một vị trí được gán chỉ số (index). Phần tử ở vị trí đầu tiên sẽ có chỉ số là 0, phần tử cuối cùng trong mảng có chỉ số là n - 1.

Khai báo, truy cập (gán giá trị, hiển thị,...) các phần tử mảng dùng dấu ngoặc vuông.

Cú pháp khai báo mảng một chiều:

kiểu_dữ_liệu[] tên_mảng = new kiểu_dữ_liệu[kích_cỡ_hoặc_số_phần_tử_trong_mảng];

Ví dụ khai báo mảng num chứa 5 số nguyên:

int[] num = new int[5];

Có thể gán giá trị cho các phần tử trong mảng như sau:

num[0] = 7; // Gán giá trị 7 cho phần tử thứ nhất trong mảng num[1] = 19; // Gán giá trị 19 cho phần tử thứ hai

Có thể gán các phần tử khi khai báo mảng, ví dụ:

int[] num = {7, 9};

Để truy cập phần tử trong mảng, dùng cú pháp:

tên_mảng[chỉ_số_phần_tử];

Để trả về kích cỡ của mảng, dùng thuộc tính length:

int size = num.length; // size = 5

Duyệt mảng

Chúng ta có thể duyệt qua các phần tử của một mảng nhờ các lệnh lặp. Ví dụ, dùng lệnh for để hiển thị tất cả các phần tử của mảng num như sau:

int[] num = {2, 4, 8, 9}; for (int i = 0; i < num.length; i++) {   int val = num[i];   System.out.print(val + " "); }

Cũng có thể dùng lệnh foreach:

int[] num = {2, 4, 8, 9}; for (int val: num)   System.out.print(val + " ");

Kết quả: 2 4 8 9

Mảng như là tham số của phương thức

Mảng có thể được sử dụng như tham số của phương thức, ví dụ:

public class MyMainClass {   public static void main(String[] args) {     int[] num = {2, 4, 8, 9};     printArray(num);   }    public static void printArray(int[] array) {     for (int i = 0; i < array.length; i++) {       System.out.print(array[i] + " ");     }   } }

Mảng nhiều chiều

Mảng nhiều chiều có thể tạo ra mảng hơn một chiều. Chúng ta có thể tạo ra mảng hai chiều, mảng ba chiều, v.v.

Cú pháp khai báo mảng hai chiều:

kiểu_dữ_liệu [][] tên_mảng = new kiểu_dữ_liệu[số_hàng][số_cột];

Ví dụ, khai báo và khởi tạo các giá trị cho mảng số thực (kiểu float) hai chiều arr2D có kích thước 7x5 như sau:

float[][] arr2D = new float[7][5]; arr2D[0][0] = 50.5f; arr2D[4][4] = 60.5f; arr2D[3][1] = 10.3f;

Đoạn mã sau sẽ hiển thị mảng arr2D ra màn hình:

for (int i = 0; i < 7; i++) {   for (int j = 0; j < 5; j++)     System.out.print(arr2D[i][j] + " ");   System.out.println(); }

Kết quả:

50.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10.3 0.0 0.0 0.0 0.0 0.0 0.0 60.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

Bộ não chúng ta chỉ có thể hình dung được mảng có số chiều tối đa là 3. Với các mảng có số chiều lớn hơn 3, thật khó để hình dung một cách trực quan, nhưng chúng ta có thể thao tác với các mảng này như đoạn mã minh họa mảng 4 chiều sau:

// khai báo mảng 4 chiều int[][][][] arr4D = new int[3][4][5][6]; // gán tất cả các phần tử của mảng đến giá trị 1729 for(int a = 0; a < 3; a++) {   for(int b = 0; b < 4; b++) {     for(int c = 0; c < 5; c++) {       for(int d = 0; d < 6; d++) {         arr4D[a][b][c][d] = 1729;       }     }   } }

Ngôn ngữ Java >

1