1. Object reference là gì?
Đối tượng là những thể hiện của một lớp, nó được tạo bằng cách sử dụng toán tử new, ví dụ như sau:
|
Student student = new Student()
|
Student student;
Sự khác nhau giữa biến primitive và biến tham chiếu
Sự khác nhau cơ bản đầu tiên mà chúng ta có thể thấy rõ là biến primitive lưu trữ một giá trị nào đó, còn biến object reference chỉ lưu trữ địa chỉ trong memory của đối tượng mà nó tham chiếu tới.
Ví dụ trong 1 phương thức main() ta có 1 phương thức và 2 biến như sau:
doSomething();
Tóm tắt:
doSomething();
int a = 100;
Student student;
Student student;
student = new Student();
Ta hãy xem cách Java xử lý lưu trữ các thông tin này như thế nào:
Như bạn có thể thấy, Java dùng 2 khối bộ nhớ để lưu trữ thông tin.
- Bộ nhớ Stack: Lưu giữ trình tự thực thi, cũng như giá trị của các biến Primitive. Khi thực thi hàm main. Java sẽ cấp phát 1 vùng nhớ cho main; ngay khi thực thi vùng main nó sẽ gặp 1 phương thức doSomething() và nó phải tiến hành thực thi phương thức đó trước khi tiếp tục thực thi trong hàm main. Vì thế nó sẽ cấp phát thêm 1 vùng nhớ cho doSomeThing chồng lên trên main. Và khi thực thi xong doSomething nó sẽ được pop ra khỏi stack.
- Bộ nhớ Heap: Nhìn vào vùng nhớ Stack khi ta khai báo đối tượng Student, lúc này Java cũng cung cấp 1 vùng nhớ trên Stack cho biến student nhưng không lưu trữ bất kì giá trị nào (null). Nhưng khi ta tiến hành tạo đối tượng cho biến student (new Student()) lập tức Java sẽ phát sinh 1 ô nhớ ở bộ nhớ heap, đồng thời gián giá trị địa chỉ của vùng nhớ heap cho biến student. Hay nói cách khác là biến student lưu trữ địa chỉ của object Student trong bộ nhớ heap.
Tóm tắt:
| Primitive | References |
|---|---|
| Sử dụng toán tử == để so sánh | Sử dụng phương thức equals() |
| Chỉ có 8 kiểu dữ liệu | Kiểu dữ liệu do chính chúng ta định nghĩa. |
| Giá trị mặc định tùy thuộc vào kiểu biến, có thể là 0 (int), false (bool), 0.0 (float) | Giá trị mặc định là null. |
| Sử dụng các phép tử toán học để thao tác trên dữ liệu | Sủ dụng các phương thức để thao tác trên dữ liệu. |

No comments:
Post a Comment