Autoboxing và Unboxing trong java là gì?

Feb 19 2023
Autoboxing: Autoboxing là một tính năng trong java tự động chuyển đổi kiểu dữ liệu nguyên thủy thành đối tượng lớp trình bao bọc tương ứng. Ví dụ: chuyển đổi một số nguyên thành số nguyên, gấp đôi thành gấp đôi, v.v.

Hộp thư tự động:

Autoboxing là một tính năng trong java tự động chuyển đổi kiểu dữ liệu nguyên thủy thành đối tượng lớp trình bao bọc tương ứng. Ví dụ: chuyển đổi một số nguyên thành số nguyên, gấp đôi thành gấp đôi, v.v.

Ví dụ đơn giản nhất về autoboxing là:

Ký tự ch = 'c'

trong đó 'c' là kiểu nguyên thủy (char) được tự động chuyển đổi thành lớp trình bao bọc tương ứng (Ký tự).

Trường hợp này có thể hữu ích trong quá trình thực hành mã hóa?

Hộp thư tự động hữu ích với danh sách (như ArrayList, LinkedList, v.v.). Hãy lấy ví dụ về ArrayList.

Như chúng ta đã biết ArrayList chỉ chứa một đối tượng chứ không chứa kiểu dữ liệu nguyên thủy có nghĩa là chúng ta có thể lưu trữ đối tượng của lớp bao bọc nhưng chúng ta không thể lưu trữ kiểu dữ liệu nguyên thủy bên trong ArrayList. Ví dụ ArrayList<Integer> arr = new ArrayList<Integer>() ; điều này là hợp lệ. Nhưng ArrayList<int> arr = new ArrayList<int>() ; điều này là không hợp lệ.

Hãy xem xét đoạn mã được viết dưới đây.

Giải thích Autoboxing (hình 1. a)

Mặc dù chúng tôi thêm các giá trị int làm kiểu nguyên thủy, thay vì các đối tượng Số nguyên, nhưng mã biên dịch thành công và không tạo ra lỗi thời gian biên dịch. Bởi vì trình biên dịch JVM chuyển đổi mã trước thành mã sau:

Cách trình biên dịch chuyển đổi mã của hình 1. a trong quá trình biên dịch (hình 1. b)

Ở đây, việc chuyển đổi kiểu nguyên thủy int thành lớp bao bọc Integer trong thao tác thêm được gọi là Autoboxing.

Mở hộp:

Unboxing là một tính năng trong java tự động chuyển đổi đối tượng lớp bao bọc thành kiểu dữ liệu nguyên thủy tương ứng. Ví dụ: chuyển đổi một Số nguyên thành một số nguyên, một Đôi thành một đôi, v.v.

Unboxing là quá trình ngược lại của Autoboxing.

Trường hợp này có thể hữu ích trong quá trình thực hành mã hóa?

Việc mở hộp giúp các lập trình viên, vì nó sẽ giúp dễ dàng thực hiện một số thao tác như phép tính số học trên cấu trúc dữ liệu lưu trữ đối tượng lớp trình bao bọc, chẳng hạn như Danh sách. Ví dụ :

Giải thích Unboxing (hình 2. a)

Chắc chắn các giá trị được lưu trữ bên trong một danh sách (mảng) thuộc loại Số nguyên, trong khi chúng tôi đang thêm các giá trị đó vào tổng biến kiểu int, các giá trị Số nguyên sẽ tự động được chuyển đổi thành int. Điều này sẽ giúp lập trình viên dễ dàng thực hiện các phép toán số học.

Mã biên dịch thành công và không tạo ra lỗi thời gian biên dịch. Bởi vì trình biên dịch JVM chuyển đổi mã trước thành mã sau:

Cách trình biên dịch chuyển đổi mã của hình 2. a trong quá trình biên dịch (hình 2. b)

Ở đây, việc chuyển đổi int (kiểu nguyên thủy) thành Integer (đối tượng lớp Wrapper) được gọi là Unboxing.

Bảng sau đây hữu ích vì nó hiển thị kiểu dữ liệu nguyên thủy với lớp trình bao bọc tương ứng của nó.

bảng liên kết giữa kiểu nguyên thủy và lớp bao bọc