Truyền tham trị và tham chiếu cho phương thức trong Java

Đây là bài 16/62 bài của series môn học Ngôn ngữ lập trình Java

Tham số của phương thức là những biến được khai báo trong khai báo phương thức. Tham số đóng vai trò là giá trị đầu vào cho phương thức.

Trong Java, có 2 cách để truyền tham số cho phương thức:

    • Tham trị (pass by value)
    • Tham chiếu (pass by reference)

Lưu ý: Ngôn ngữ Java không có khái niệm con trỏ (pointer) như trong C++ để tránh các trường hợp không kiểm soát tốt việc truy xuất trực tiếp đến bộ nhớ dẫn đến gây lỗi chương trình. Điều này cũng giúp lập trình viên cảm thấy Java dễ hiểu, dễ học hơn C++. Và do Java không hỗ trợ con trỏ nên không có cách truyền địa chỉ cho phương thức như trong C++.

1. Truyền tham trị trong Java

Trong Java, khi gọi một phương thức và truyền một giá trị cho phương thức, được gọi là truyền tham trị. Việc thay đổi giá trị chỉ có hiệu lực trong phương thức được gọi, không có hiệu lực bên ngoài phương thức.

Trong Java, truyền tham trị dành cho các tham số có kiểu dữ liệu nguyên thủy là byte, short, int, long, float, double, boolean, char.

 Ví dụ:

class Main {
    /*Hoán đổi 2 biến*/
    public static void swap(int n1, int n2) {
        System.out.println("\tGia tri cac bien ben trong ham swap");
        System.out.println("\t\tTruoc khi swap, n1 = " + n1 + " va n2 = " + n2);
        // Swap n1 with n2
        int temp = n1;
        n1 = n2;
        n2 = temp;
        System.out.println("\t\tSau khi swap, n1 = " + n1 + " va n2 = " + n2);
    }
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;
        System.out.println("Truoc khi goi ham swap, num1 = " + num1 + " va num2 = " + num2);
        swap(num1, num2);
        System.out.println("Sau khi goi ham swap, num1 = " + num1 + " va num2 = " + num2);
    }
}
Kết quả
Truoc khi goi ham swap, num1 = 1 va num2 = 2
	Gia tri cac bien ben trong ham swap
		Truoc khi swap, n1 = 1 va n2 = 2
		Sau khi swap, n1 = 2 va n2 = 1
Sau khi goi ham swap, num1 = 1 va num2 = 2

Rõ ràng, các số num1 num2 chỉ thay đổi trong hàm swap. Sau khi ra khỏi hàm swap thì giá trị num1 num2 hoàn toàn không thay đổi.

2. Truyền tham chiếu trong Java

Trong Java, khi gọi một phương thức và truyền một tham chiếu cho phương thức, được gọi là truyền tham chiếu. Việc thay đổi giá trị của biến tham chiếu bên trong phương thức làm thay đổi giá trị của nó.

Trong Java, tất các phương thức có tham số là biến có kiểu là các lớp (class) đều là kiểu tham chiếu.

Ví dụ:

class Main {
    int data;
    Main(int dataValue){
        data = dataValue;
    }
    /*Hoán đổi 2 biến*/
    public static void swap(Main n1, Main n2) {
        System.out.println("\tGia tri cac bien ben trong ham swap");
        System.out.println("\t\tTruoc khi swap, n1.data = " + n1.data + " va n2.data = " + n2.data);
        // Swap n1.data with n2.data
        int temp = n1.data;
        n1.data = n2.data;
        n2.data = temp;
        System.out.println("\t\tSau khi swap, n1.data = " + n1.data + " va n2.data = " + n2.data);
    }
    public static void main(String[] args) {
        Main n1 = new Main(1);
        Main n2 = new Main(2);
        System.out.println("Truoc khi goi ham swap, n1.data = " + n1.data + " va n2.data = " + n2.data);
        swap(n1, n2);
        System.out.println("Sau khi goi ham swap, n1.data = " + n1.data + " va n2.data = " + n2.data);
    }
}
Kết quả
Truoc khi goi ham swap, n1.data = 1 va n2.data = 2
	Gia tri cac bien ben trong ham swap
		Truoc khi swap, n1.data = 1 va n2.data = 2
		Sau khi swap, n1.data = 2 va n2.data = 1
Sau khi goi ham swap, n1.data = 2 va n2.data = 1

Rõ ràng, khi truyền đối số là đối tượng Main n1, n2 vào hàm swap thì data của các đối tượng này sẽ thay đổi sau khi ra khỏi hàm swap. Đối tượng Main n1, n2 là biến tham chiếu trong Java.

Bài này đã giới thiệu các bạn về truyền tham trị và tham chiếu trong Java. Trong Java, các tham số có kiểu dữ liệu nguyên thủy đều là truyền tham trị. Các tham số có kiểu dữ liệu không phải là kiểu nguyên thủy đều là truyền tham chiếu.

Có một sự khác nhau lớn giữa truyền tham trị và tham chiếu trong Java và C++. Các bạn có thể đọc bài Truyền tham trị và truyền tham chiếu cho hàm trong C++ để hiểu rõ sự khác nhau này.

5/5 - (2 bình chọn)
Bài trước và bài sau trong môn học<< Định nghĩa và gọi phương thức (method) trong JavaKhai báo và khởi tạo mảng 1 chiều (one dimensional array) trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.