1. รายการประเภทกระดาษห่อ
คุณรู้ว่า Java มี 8 ประเภทดั้งเดิมซึ่งเป็นประเภทที่ไม่ใช่คลาส ในแง่หนึ่งนี่เป็นสิ่งที่ดี — มันเรียบง่ายและใช้พื้นที่น้อย ในทางกลับกัน บางครั้งชั้นเรียนก็เป็นเพียงสิ่งที่เราต้องการ คุณจะทราบสาเหตุที่แท้จริงในบทเรียนถัดไป
แล้วจะทำอะไรได้บ้าง?
เริ่มต้นด้วย Java เวอร์ชันที่ห้า แต่ละประเภทดั้งเดิมได้รับคลาสแฝด แต่ละคลาสดังกล่าวจะจัดเก็บฟิลด์เดียวที่มีค่าของประเภทเฉพาะ คลาสเหล่านี้เรียกว่าwrapper typesเนื่องจากคลาสเหล่านี้รวมค่าดั้งเดิมไว้ในคลาส
นี่คือรายการประเภทเหล่านี้ คุณรู้หรือไม่?
| ประเภทดึกดำบรรพ์ | ชั้นห่อ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชื่อของประเภทดั้งเดิมจะขึ้นต้นด้วยอักษรตัวพิมพ์เล็ก แต่ชื่อของคลาสตัวตัดคำจะขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่ ชื่อคลาสบางตัวยังยาวกว่าเล็กน้อย: Integerinstead of intи Characterinstead ofchar
วัตถุทั้งหมดของคลาส wrapper ไม่สามารถเปลี่ยนแปลงได้ ( ไม่เปลี่ยนรูป )
รหัสแบบง่ายสำหรับIntegerคลาสมีลักษณะดังนี้:
| รหัส | บันทึก |
|---|---|
|
ตัวสร้างตัวแปรเมธอด ส่งคืนค่า เมธอดสแตติกสร้างออบเจกต์ใหม่ Integerสำหรับintตัวแปร |
2. การแปลง an intเป็น anInteger
ประเภทของ Wrapper ถือเป็นสิ่งที่คู่กันกับพี่น้องดั้งเดิม: คุณสามารถสร้างวัตถุ Wrapper ที่สอดคล้องกับประเภทดั้งเดิมได้อย่างง่ายดาย
ลองใช้ประเภท int เป็นตัวอย่างเพื่อวิเคราะห์ว่าประเภทดั้งเดิมโต้ตอบกับประเภท wrapper ที่สอดคล้องกันอย่างไร รหัสสำหรับการแปลงจาก an intเป็น an Integerและในทางกลับกันจะมีลักษณะดังนี้:
ในการแปลง an intเป็น an Integerคุณต้องเขียนโค้ดนี้:
Integer name = new Integer(value);
nameชื่อของตัวแปรอยู่ที่ไหนIntegerและvalueเป็นintค่า ที่ห่อไว้
ตัวอย่าง:
| รหัส | บันทึก |
|---|---|
|
|
|
|
|
และในการแปลง an Integerเป็น an intคุณต้องเขียนโค้ดนี้:
int name = variable.intValue();
nameชื่อของ ตัวแปร อยู่ที่ไหนintและvariableเป็นการอ้างอิงถึงIntegerวัตถุ
ตัวอย่าง:
| รหัส | บันทึก |
|---|---|
|
|
|
|
|
|
|
|
3. การทำกล่องอัตโนมัติและการแกะกล่อง
แต่การดำเนินการอย่างง่ายกับIntegerประเภทนั้นไม่ใช่เรื่องง่ายที่จะเขียน
ดังที่เราได้กล่าวไว้ก่อนหน้านี้Integerประเภทไม่สามารถเปลี่ยนแปลงได้ ( ไม่เปลี่ยนรูป ) หากต้องการสร้างIntegerวัตถุด้วยค่าใหม่intคุณต้องสร้างIntegerวัตถุ ใหม่อย่างชัดเจน ที่กล่าวว่าเป็นเรื่องง่ายที่จะรับค่าที่intเก็บไว้ภายในIntegerวัตถุ - เพียงแค่เรียกใช้intValue()เมธอด
ตัวอย่าง:
| รหัส | คำอธิบาย |
|---|---|
|
ล้อม5วัตถุ รับค่าจากIntegerวัตถุสร้าง วัตถุใหม่(เท่ากับ 10)IntegerInteger |
นี่เป็นโค้ดที่ค่อนข้างยุ่งยาก คุณว่าไหม?
ผู้สร้าง Java คิดเช่นนั้น ดังนั้นพวกเขาจึงสอนคอมไพเลอร์ถึงวิธีดำเนินการเหล่านี้โดยอัตโนมัติ การแปลง an โดยอัตโนมัติintเป็น an Integerเรียกว่าautoboxing (การใส่ค่าลงในช่องโดยอัตโนมัติ) และการดำเนินการย้อนกลับ (การแปลง an เป็นIntegeran int) เรียกว่าunboxing
| รหัสของคุณ | สิ่งที่คอมไพเลอร์เห็น |
|---|---|
|
|
|
|
|
|
ต้องขอบคุณ autoboxing และ unboxing คุณสามารถกำหนด an intให้กับIntegerตัวแปรและในทางกลับกัน ได้อย่างปลอดภัย คุณสามารถเขียนนิพจน์ของความซับซ้อนใดๆ ได้โดยไม่ต้องแยกความแตกต่างระหว่างintและIntegerประเภท
ตัวอย่าง:
| รหัส | สิ่งที่คอมไพเลอร์จะสร้าง |
|---|---|
|
|
|
|
4. การเปรียบเทียบตัวแปร wrapper
การแกะกล่องอัตโนมัติและการแกะกล่องเป็นกระบวนการที่ง่ายและโปร่งใส เราใช้new Integer()ข้อความสั่งตามต้องการ และเราเรียกintValue()เมธอดตามต้องการ
ทุกอย่างทำงานได้ดีและง่ายสำหรับคุณซึ่งเป็นโปรแกรมเมอร์ โปรดทราบว่าหากคุณเปรียบเทียบ an Integerและ an Integerการเปรียบเทียบจะขึ้นอยู่กับการอ้างอิงไม่ใช่ค่า
| รหัส | เอาต์พุตคอนโซล |
|---|---|
|
|
|
|
ตัวแปรaand bไม่เก็บintค่า พวกเขาเก็บการอ้างอิงถึงวัตถุ นั่นหมายความว่าสิ่งสำคัญคือต้องจำวิธีเปรียบเทียบอย่างถูกต้อง:
| ผิด | ขวา |
|---|---|
|
|
GO TO FULL VERSION