Thứ Hai, 27 tháng 7, 2015

[Java cơ bản] Immutable Objects trong java

    Immutable Object là kiểu dữ liệu đặc biệt trong java, được khai báo ở bộ nhớ heap. Immutable nghĩa là bất biến. Các đối tượng Immutable sau khi được khởi tạo thì giá trị của nó sẽ không bao giờ (không thể) thay đổi. Việc thay đổi giá trị của 1 biến chứa đối tượng Immutable sẽ sinh ra một vùng nhớ mới, và tất nhiên, biến này sẽ được trỏ sang vùng nhớ mới đó. Đối với vùng nhớ cũ, giá trị sẽ không thay đổi, và nếu không có một biến nào trỏ tới nó nữa, thì nó được xem như là "rác" - sẽ được dọn dẹp.

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....
Các class Immutable thường được khai báo là final class.

Nếu bài viết có gì sai sót, mong các bạn góp ý. Thank

1 nhận xét:

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