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ì mỗi biến có lưu giá trị của biến chính xác tại địa chỉ bộ nhớ dành cho biến đó (nói cách khác địa chỉ bộ nhớ có lưu giá trị), hai biến có tên khác nhau thì có hai địa chỉ bộ nhớ khác nhau để lưu dữ liệu. Do vậy, với tham số kiểu này khi chuyển nó trong các tham số, các phép toán nó truyền giá trị (copy giá trị từ địa chỉ bộ nhớ này sang địa chỉ bộ nhớ khác) chứ không truyền bản thân địa chỉ của biến trong bộ nhớ.
Xem ví dụ sau:
public class App { // Phương thức có tham số kiểu int, với kiểu int (kiểu nguyên thủy) // thì tham số truyền là giá trị (tham trị) static void addOneTo(int num) { num = num + 1; } static void Test_addOneTo() { int x = 5; // giá trị biến x được truyền (copy) vào tham số hàm (biến cục bộ), // 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); // In ra 5 } } // Gọi hàm Test_addOneTo() kết quả in ra: // 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 sau khi chạy addOneTo(x);
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 (giá trị) của biến (chính là các đối tượng).
Trong Java tất các các biến của lớp (đối tượng) đều là kiểu tham chiếu.
Hãy xem ví dụ sau, giả sử có lớp Person
public class Student { private String Name; private int Age; public void setName(String name) { this.Name = name; } public void setAge(int age) { this.Age = age; } public int getAge() { return this.Age; } }
Sử dụng lớp Student kiểm tra làm tham số phương thức
static void celebrateBirthday(Student p) { p.setAge(p.getAge() + 1); } static void test_celebrateBirthday() { Student j; j = new Student("XuanThuLab"); 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()); //21 } // Gọi phương thức test_celebrateBirthday // Xuất ra "21"