Kể từ JDK1.5 thì java đã bổ sung thêm hai tính năng quan trọng: Auto-boxing và Unboxing

Autoboxing

Autoboxing là sự chuyển đổi tự động mà trình biên dịch Java thực hiện giữa các kiểu nguyên thủy và các lớp Wrapper tương ứng của nó. Ví dụ, chuyển đổi kiểu int sang kiểu Integer, kiểu double sang kiểu Double,….

kiểu nguyên thủy và kiểu Wrapper tương ứng

Theo dõi ví dụ dưới đây để biết cách hoạt động của việc Autoboxing

List<Integer> integerList = new ArrayList<>();

for (int i = 1; i < 10; i++) {
     integerList.add(i);//int to Integer
}

Trong ví dụ trên, integerList là một List kiểu dữ liệu Integer, nó không phải là một List kiểu dữ liệu nguyên thủy.

Ở trong vòng lặp thực hiện việc thêm các phần tử kiểu dữ liệu nguyên thủy vào integerList, thực tế đoạn mã trên khi runtime sẽ được chuyển thành đoạn mã sau:

List<Integer> integerList = new ArrayList<>();

for (int i = 1; i < 10; i++) {
     integerList.add(Integer.valueOf(i));//Autoboxing
}

Unboxing

Unboxing thực hiện ngược lại so với Autoboxing, các kiểu dữ liệu Wrapper sẽ được chuyển về kiểu dữ liệu nguyên thủy tương ứng của nó.

int sum = 0;
for (Integer i: integerList) {
    if (i % 2 == 0)
        sum += i;  //Unboxing
}

Ta thấy ở đoạn code trên thì phép chia lấy dư không thực hiện trên kiểu đối tượng Integer nên trình biên dịch đã tự động chuyển nó về kiểu int để thực hiện phép toán bằng cách gọi tới phương thức intValue().

Lợi thế của việc Autoboxing và Unboxing

  • Thuận tiện trong việc viết code, không phải chuyển đổi kiểu dữ liệu một cách thủ công
  • Kiểu dữ liệu nguyên thủy lưu trữ trong Stack, còn kiểu đối tượng lưu trữ trong Heap nên hiệu suất của nó nhanh hơn
  • Dễ dàng khi làm việc với các kiểu dữ liệu đối tượng

Xem thêm các bài viết liên quan dưới đây: