1. รายการประเภทกระดาษห่อ
คุณรู้ว่า Java มี 8 ประเภทดั้งเดิมซึ่งเป็นประเภทที่ไม่ใช่คลาส ในแง่หนึ่งนี่เป็นสิ่งที่ดี — มันเรียบง่ายและใช้พื้นที่น้อย ในทางกลับกัน บางครั้งชั้นเรียนก็เป็นเพียงสิ่งที่เราต้องการ คุณจะทราบสาเหตุที่แท้จริงในบทเรียนถัดไป
แล้วจะทำอะไรได้บ้าง?
เริ่มต้นด้วย Java เวอร์ชันที่ห้า แต่ละประเภทดั้งเดิมได้รับคลาสแฝด แต่ละคลาสดังกล่าวจะจัดเก็บฟิลด์เดียวที่มีค่าของประเภทเฉพาะ คลาสเหล่านี้เรียกว่าwrapper typesเนื่องจากคลาสเหล่านี้รวมค่าดั้งเดิมไว้ในคลาส
นี่คือรายการประเภทเหล่านี้ คุณรู้หรือไม่?
ประเภทดึกดำบรรพ์ | ชั้นห่อ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชื่อของประเภทดั้งเดิมจะขึ้นต้นด้วยอักษรตัวพิมพ์เล็ก แต่ชื่อของคลาสตัวตัดคำจะขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่ ชื่อคลาสบางตัวยังยาวกว่าเล็กน้อย: Integer
instead of int
и Character
instead 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)Integer Integer |
นี่เป็นโค้ดที่ค่อนข้างยุ่งยาก คุณว่าไหม?
ผู้สร้าง Java คิดเช่นนั้น ดังนั้นพวกเขาจึงสอนคอมไพเลอร์ถึงวิธีดำเนินการเหล่านี้โดยอัตโนมัติ การแปลง an โดยอัตโนมัติint
เป็น an Integer
เรียกว่าautoboxing (การใส่ค่าลงในช่องโดยอัตโนมัติ) และการดำเนินการย้อนกลับ (การแปลง an เป็นInteger
an int
) เรียกว่าunboxing
รหัสของคุณ | สิ่งที่คอมไพเลอร์เห็น |
---|---|
|
|
|
|
|
|
ต้องขอบคุณ autoboxing และ unboxing คุณสามารถกำหนด an int
ให้กับInteger
ตัวแปรและในทางกลับกัน ได้อย่างปลอดภัย คุณสามารถเขียนนิพจน์ของความซับซ้อนใดๆ ได้โดยไม่ต้องแยกความแตกต่างระหว่างint
และInteger
ประเภท
ตัวอย่าง:
รหัส | สิ่งที่คอมไพเลอร์จะสร้าง |
---|---|
|
|
|
|
4. การเปรียบเทียบตัวแปร wrapper
การแกะกล่องอัตโนมัติและการแกะกล่องเป็นกระบวนการที่ง่ายและโปร่งใส เราใช้new Integer()
ข้อความสั่งตามต้องการ และเราเรียกintValue()
เมธอดตามต้องการ
ทุกอย่างทำงานได้ดีและง่ายสำหรับคุณซึ่งเป็นโปรแกรมเมอร์ โปรดทราบว่าหากคุณเปรียบเทียบ an Integer
และ an Integer
การเปรียบเทียบจะขึ้นอยู่กับการอ้างอิงไม่ใช่ค่า
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
|
|
ตัวแปรa
and b
ไม่เก็บint
ค่า พวกเขาเก็บการอ้างอิงถึงวัตถุ นั่นหมายความว่าสิ่งสำคัญคือต้องจำวิธีเปรียบเทียบอย่างถูกต้อง:
ผิด | ขวา |
---|---|
|
|
GO TO FULL VERSION