AUTOBOXING TRONG JAVA
[AUTOBOXING
TRONG JAVA]
Boxing,
unboxing là một khái niệm liên quan giữa kiểu nguyên thủy (primitive type) và
các lớp bao (Wrapper) tương ứng. Hiểu đơn giản, boxing là chuyển đổi từ kiểu
nguyên thủy thành lớp bao, unboxing là chuyển từ lớp bao về kiểu nguyên thủy. Để
hiểu rõ vấn đề hơn, hãy xem ví dụ dưới.
Giả
dụ ta muốn tạo một Collection với kiểu nguyên, ta bắt buộc phải dùng lớp
Integer vì Collection không chấp nhận kiểu dữ liệu nguyên thủy. Sau khi tạo
Collection, khi ta muốn lấy giá trị Integer ra là một kiểu nguyên thủy int, ta
phải lấy nó ra dưới dạng một thể hiện của Integer, và dùng hàm intValue để
unboxing các thể hiện của Integer thành kiểu nguyên thủy int. Việc boxing và
unboxing liên tục trong dòng code khiến cho việc viết code trở nên rắc rối,
chính vì thế kể từ Java 1.5 trở đi, khái niệm Autoboxing ra đời. Sự xuất hiện của
autoboxing giúp người dùng làm mờ đi khoảng cách giữa lớp bao và kiểu nguyên thủy,
khi nó có thể tự động chuyển đổi qua lại với nhau, nhưng họ vẫn không loại bỏ
việc boxing, unboxing thủ công, vì đôi khi việc tự động có thể làm chậm mọi thứ.
Và
tiện phần kiến thức ở trên, mình sẽ giải thích sự khác nhau giữa
Integer.parseInt() và Integer.valueOf(). Điểm giống nhau là cả hai hàm này đều
chuyển đổi từ một chuỗi sang số nguyên, nhưng nó có sự khác nhau. Với
parseInt(), nó trả về một kiểu dữ liệu nguyên thủy, trong khi đó với valueOf(),
nó trả về một thể hiện của Integer. Bạn vẫn thắc mắc tại sao int num =
Integer.valueOf(“1234”); vẫn gán được giá trị nguyên thủy cho biến num, đó là
vì sau khi thực hiện hàm Integer.valueOf(“1234”), Java thực hiện thêm một thao
tác là tự động unboxing nó về kiểu nguyên thủy trước khi gán cho num. Vì thế
mình khuyến khích nên sử dụng Integer.parseInt() hơn Integer.valueOf() để
chương trình có được hiệu suất tốt hơn.
Nhận xét
Đăng nhận xét