1. Danh sách các loại trình bao bọc
Bạn biết rằng Java có 8 kiểu nguyên thủy, đó là những kiểu không phải là lớp. Một mặt, điều này là tốt — chúng đơn giản và chiếm ít không gian. Mặt khác, đôi khi các lớp học chính là thứ chúng ta cần. Bạn sẽ tìm ra chính xác lý do tại sao lại như vậy trong bài học tiếp theo.
Vậy thì cái gì có thể làm được?
Bắt đầu với phiên bản thứ năm của Java, mỗi kiểu nguyên thủy có được một lớp kép. Mỗi lớp như vậy lưu trữ một trường duy nhất với giá trị của một loại cụ thể. Các lớp này được gọi là các loại trình bao bọc , bởi vì chúng bao bọc các giá trị nguyên thủy trong các lớp.
Dưới đây là danh sách các loại này. Bạn có biết bất kỳ?
| loại nguyên thủy | lớp bao bọc |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tên của các kiểu nguyên thủy bắt đầu bằng một chữ cái viết thường, nhưng tên của các lớp bao bọc bắt đầu bằng một chữ cái viết hoa. Một số tên lớp cũng dài hơn một chút: Integerinstead of intvà Characterinstead of char.
Tất cả các đối tượng của các lớp bao bọc là không thể thay đổi ( không thay đổi ).
Mã đơn giản hóa cho Integerlớp trông giống như thế này:
| Mã số | Ghi chú |
|---|---|
|
Hàm tạo biến Phương thức trả về một giá trị Phương thức tĩnh tạo một Integerđối tượng mới cho một intbiến |
2. Chuyển đổi an intthành anInteger
Các kiểu trình bao bọc được coi là đối trọng với các anh chị em nguyên thủy của chúng: bạn có thể dễ dàng tạo một đối tượng trình bao bọc tương ứng với một kiểu nguyên thủy.
Hãy sử dụng kiểu int làm ví dụ để phân tích cách các kiểu nguyên thủy tương tác với các kiểu trình bao bọc tương ứng của chúng. Mã để chuyển đổi từ an intsang an Integervà ngược lại sẽ như sau:
Để chuyển đổi an intthành an Integer, bạn cần viết mã này:
Integer name = new Integer(value);
Đâu namelà tên của một Integerbiến và valuelà intgiá trị được bao bọc.
Ví dụ:
| Mã số | Ghi chú |
|---|---|
|
|
|
|
|
Và để chuyển đổi an Integerthành an int, bạn cần viết mã này:
int name = variable.intValue();
Đâu namelà tên của một intbiến và variablelà một tham chiếu đến một Integerđối tượng.
Ví dụ:
| Mã số | Ghi chú |
|---|---|
|
|
|
|
|
|
|
|
3. Tự động đóng hộp và mở hộp
Nhưng ngay cả những thao tác đơn giản với Integerkiểu cũng không dễ viết.
Như chúng tôi đã nói trước đây, Integerloại là không thể thay đổi ( immutable ). Để tạo một Integerđối tượng có giá trị mới int, bạn cần tạo một Integerđối tượng mới một cách rõ ràng. Điều đó nói rằng, thật dễ dàng để lấy giá trị của một đối tượng intđược lưu trữ bên trong một Integerđối tượng — chỉ cần gọi intValue()phương thức.
Ví dụ:
| Mã số | Sự miêu tả |
|---|---|
|
Bao bọc 5đối Integertượng Lấy giá trị từ Integerđối tượng Tạo Integerđối tượng mới (bằng 10) |
Đây là mã khá rườm rà, bạn có nghĩ vậy không?
Những người tạo ra Java đã nghĩ như vậy, vì vậy họ đã dạy trình biên dịch cách thực hiện các thao tác này một cách tự động. Việc chuyển đổi tự động của một intthành một Integerđược gọi là autoboxing (tự động đặt giá trị vào một hộp) và hoạt động ngược lại (chuyển đổi một Integerthành một int) được gọi là unboxing .
| Ma cua ban | Những gì trình biên dịch nhìn thấy |
|---|---|
|
|
|
|
|
|
Nhờ autoboxing và unboxing, bạn có thể gán an toàn intcho một Integerbiến và ngược lại. Bạn có thể viết các biểu thức phức tạp bất kỳ mà không cần phân biệt giữa các loại intvà Integercác loại.
Ví dụ:
| Mã số | Những gì trình biên dịch sẽ tạo ra |
|---|---|
|
|
|
|
4. So sánh các biến bao bọc
Autoboxing và unboxing là các quy trình đơn giản và minh bạch. Chúng tôi sử dụng new Integer()các câu lệnh khi cần thiết và chúng tôi gọi intValue()phương thức khi cần thiết.
Mọi thứ hoạt động tốt đẹp và dễ dàng cho bạn, lập trình viên. Hãy nhớ rằng nếu bạn so sánh an Integervà an Integer, thì phép so sánh dựa trên tham chiếu chứ không phải giá trị.
| Mã số | Đầu ra bảng điều khiển |
|---|---|
|
|
|
|
Các biến avà bkhông lưu trữ intgiá trị. Họ lưu trữ các tham chiếu đến các đối tượng. Điều đó có nghĩa là điều quan trọng là phải nhớ cách so sánh chúng một cách chính xác:
| Sai | Phải |
|---|---|
|
|
GO TO FULL VERSION