Biến tham chiếu trong Java - aktvTech - Share your tech knowledge

Recent

Home Top Ad

Responsive Ads Here

Friday, May 15, 2020

Biến tham chiếu trong Java

Trong Java chúng ta có hai loại biến là biến primitive và biến tham chiếu (biến object reference).

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()
khi đó một địa chỉ heap trong bộ nhớ chứa dữ liệu của đối tượng đó sẽ được trả về, và giá trị của địa chỉ này được gán cho một biến, và biến này gọi là biến tham chiếu, đối tượng này được gọi là đối tượng được tham chiếu. Chúng ta có thể xem biến object reference như là một đối tượng quản lý đối tượng, cho phép chúng ta truy cập đến các thuộc tính của đối tượng đó. Giá trị mặc định của biến tham chiếu là null nếu biến đó không được gán đến bất kỳ địa chỉ của đối tượng nào. Nghĩa là nó được khai báo như sau:

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();
int a = 100;

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.
  1. 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.
  2. 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