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: Integer
instead of int
и Character
instead 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 Integer
lớ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 int biến |
2. Chuyển đổi an int
thà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 int
sang an Integer
và ngược lại sẽ như sau:
Để chuyển đổi an int
thành an Integer
, bạn cần viết mã này:
Integer name = new Integer(value);
Đâu name
là tên của một Integer
biến và value
là int
giá trị được bao bọc.
Ví dụ:
Mã số | Ghi chú |
---|---|
|
|
|
|
|
Và để chuyển đổi an Integer
thành an int
, bạn cần viết mã này:
int name = variable.intValue();
Đâu name
là tên của một int
biến và variable
là 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 Integer
kiểu cũng không dễ viết.
Như chúng tôi đã nói trước đây, Integer
loạ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 Integer tượ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 int
thà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 Integer
thà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 int
cho một Integer
biế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 int
và Integer
cá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 Integer
và 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 a
và b
không lưu trữ int
giá 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