Biến / tham số trong Java có hai kiểu, thứ nhất là kiểu giá trị và thứ hai là kiểu tham chiếu.

Tham số kiểu giá trị (Tham trị) trong Java

Kiểu này dành cho các biến, tham số khai báo kiểu dữ liệu cơ bản nguyên thủy gồm: byte, short, int, long, float, double, boolean, char xem thêm những kiểu dữ liệu nguyên thủy Java

Kiểu này thì giá trị của biến được lưu chính xác tại địa chỉ bộ nhớ (nói cách khác địa chỉ bộ nhớ có lưu giá trị). Do vậy khi chuyển nó trong các tham số, các phép toán nó truyền giá trị chứ không truyền bản thân địa chỉ của biến trong bộ nhớ.

Xem ví dụ sau:

public class MyClass {
    static void addOneTo(int num) {
        num = num + 1;
    }

    public static void main(String[] args) {
        int x = 5;

        // giá trị biến x được truyền vào tham số hàm, bản thân địa chỉ ô nhớ lưu giá trị biến x hàm không biết
        addOneTo(x);
        System.out.println(x);
    }

}
// Outputs "5"

Ở ví dụ trên, phương thức addOneTo() nhận tham số giá trị (kiểu int) là 5, chứ không phải nhận địa chỉ biến, nên bản thân biến ngoài hàm không bị tác động, biến x của hàm main vẫn là 5

Tham số kiểu tham chiếu trong Java

Tham số tham chiếu (Reference Type) nó lưu trữ bên trong nó một địa chỉ tham khảo (chứ không phải giá trị) mà địa chỉ đó sẽ dùng để truy cập bộ nhớ khi lưu / lấy dữ liệu của biến (chính là các đối tượng).

Khi bạn tạo ra đối tượng từ các lớp, bạn đã tạo ra một biến kiểu tham chiếu.

Hãy xem ví dụ sau, giả sử có lớp Person

public class Person {
    private String Name;
    private int Age;

    public Person(String name) {
        this.Name = name;
    }

    public void setAge(int age) {
        this.Age = age;
    }

    public int getAge() {
        return this.Age;
    }

}

Sử dụng lớp Person

public class MyClass {
    public static void main(String[] args) {
        Person j;
        j = new Person("John");
        j.setAge(20);

        // j là đối tượng do nó là tham số tham chiếu, hàm celebrateBirthday tương tác với chính đối tượng
          // lớp Person mà biến trỏ tới
        celebrateBirthday(j);

        System.out.println(j.getAge());
    }

    static void celebrateBirthday(Person p) {
        p.setAge(p.getAge() + 1);
    }
}

//Outputs "21"

Bạn thấy phương thức celebrateBirthday nhận đối tượng Person làm tham số, do là đối tượng từ lớp mà tham số này tham chiếu đến, nên khi phương thức thay đổi giá trị thuộc tính của đối tượng, thì đối tượng khai báo trong main thay đổi: bạn thấy xuất ra 25

Kiểu Array, String là tham chiếu, các đối tượng tượng là kiểu tham chiếu

Đăng ký theo dõi ủng hộ kênh