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,….
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:
- Bộ nhớ Heap và bộ nhớ Stack trong Java
- Quy ước đặt tên trong Java (Naming convention)
- Pass by value, Pass by reference trong java
- Từ khóa trong java và chức năng của nó (keywords)
- Kiểu dữ liệu trong java và tác dụng của nó
- Improve Java Performance: thủ thuật tối ưu [Phần 1]
- Crack Intellij IDEA Ultimate version 2022
- Distributed Lock with Hazelcast and Spring
- How to build Rate Limit with Hazelcast and Spring Boot
- Biết sử dụng git cherry-pick để làm việc hiệu quả hơn
- Git revert với Git reset hoạt động như thế nào?
- Git stash giúp bạn trở nên chuyên nghiệp như thế nào
- Câu chuyện phỏng vấn online mùa Covid
- Series tìm hiểu System Design
- Series tìm hiểu Hazelcast
- Series tìm hiểu lập trình java
- Series crack Intellij IDEA
- Series tìm hiểu Docker
- Series tìm hiểu Git
- Series tìm hiểu Kafka
- Series tìm hiểu ElasticSearch
- Series tìm hiểu Linux
- Series phỏng vấn kĩ sư phần mềm
- Series review sách