Hãy thử tưởng tượng với đoạn code sau :
ImmutableType a = value; ImmutableType b = value;Trong đó ImmutableType là kiểu dữ liệu Immutable. value là giá trị được gán.
Khi chạy qua câu lệnh thứ 1, hệ điều hành sẽ cấp phát một vùng nhớ mới có kích thước phù hợp với kiểu dữ liệu ImmutableType vào vùng nhớ heap, vùng nhớ này có giá trị là value.
Khi chạy đến dòng lệnh thứ 2, vì giá trị value đã tồn tại sẵn trong bộ nhớ heap, nên nó sẽ không đươc cấp phát bộ nhớ mới nữa, thay vào đó là biến b sẽ được gán vào vùng nhớ mà biến a đang trỏ vào.
![]() | ||
| Biến a và b đều trỏ vào một vùng nhớ trên heap |
Vậy điều gì sẽ xảy ra nếu chúng ta thay đổi giá trị của b : b = value1 ? giá trị của a có thay đổi theo b hay không? Câu trả lời là không, Khi chúng ta thay đổi giá trị b = value1, nó sẽ được cấp phát bộ nhớ mới trong heap, và trỏ sang vùng nhớ mới này. Lúc này, a và b sẽ trỏ vào 2 địa chỉ bộ nhớ khác nhau. Tương tự như vậy, nếu chúng ta tiếp tục thay đổi giá trị a = value2. a cũng sẽ được cấp 1 vùng nhớ mới. Khi đó vùng nhớ chứa giá trị value ban đầu không có biến nào trỏ vào nữa, nó sẽ được xem như là "rác".
Dưới đây là một số kiểu Immutable trong java :
- String
- Các class wrapper của kiểu dữ liệu nguyên thủy như Integer, Float, .....
- BigDecimal....
Nếu bài viết có gì sai sót, mong các bạn góp ý. Thank

Minh nghi bai viet nay lien quan den van de "Pass-by-value" hon la "Immutable va mutable" object trong java. Bai viet cung van chinh xac nhung luc click vao thi minh tuong se doc duoc thong tin ve viec lam sao tao mot class Immutable vs cac object immutable va loi ich, bat loi cua viec su dung kieu object nay. But anyway thank tac gia ^^
Trả lờiXóa