Primitive Wrapper class – Immutable

Mình xin nhắc lại xíu về tính chất immutable, immutable là tính chất mà trong đó các instance của class không thể thay đổi sau khi khởi tạo.

Xem ví dụ sau

public class Main {

    public static void main(String[] args)
    {
        Integer i = new Integer("10");
        System.out.println(i);
        modify(i);
        System.out.println(i);
    }

    private static void modify(Integer i)
    {
        i = i + 1;
    }
}

Output

10
10

Trong hàm modify() rõ ràng mình đã cộng thêm 1 nhưng nó giá trị của i vẫn không thay đổi. Đó là vì tất cả các wrapper class đều có tính chất immutable. Vì vậy phép cộng 1 trong hàm modify() sẽ khởi tạo một object mới chứ không thay đổi trên object i truyền vào.

Các bước thực hiện

  1. Unbox i thành x có kiểu dữ liệu là int.
  2. Cộng 1 vào x.
  3. Box x thành một Integer wrapper khác.
  4. Gán kết quả cho i.

Ví object i được truyền theo kiểu pass by value nên hành động cộng thêm một của chúng ta không thay đổi giá trị trên object i của hàm Main.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x