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

Bài đăng phổ biến từ blog này

Deploy project Springboot MIỄN PHÍ sử dụng Render

Ứng dụng Mã hóa bất đối xứng (Asymmetric cryptography) vào Chữ ký số (Digital Signature)

API và HTTP - Một số khái niệm cơ bản cần biết về Web (Phần 2)