Autoboxing และ Unboxing ใน java คืออะไร
กล่องอัตโนมัติ:
Autoboxing เป็นคุณสมบัติใน java ที่แปลงประเภทข้อมูลดั้งเดิมเป็นวัตถุคลาส wrapper ที่สอดคล้องกันโดยอัตโนมัติ ตัวอย่างเช่น การแปลง int เป็นจำนวนเต็ม, double เป็น double เป็นต้น
ตัวอย่างที่ง่ายที่สุดของ autoboxing คือ:
ตัวอักษร ch = 'c'
โดยที่ 'c' เป็นประเภทดั้งเดิม (ถ่าน) ที่ถูกแปลงเป็นคลาส wrapper ที่สอดคล้องกัน (ตัวอักษร) โดยอัตโนมัติ
สิ่งนี้จะมีประโยชน์ที่ไหนระหว่างการฝึกเขียนโค้ด
การใส่กล่องอัตโนมัติมีประโยชน์กับรายการ (เช่น ArrayList, LinkedList เป็นต้น) ลองมาดูตัวอย่าง ArrayList
ดังที่เราทราบ ArrayList มีเฉพาะวัตถุเท่านั้น ไม่ใช่ประเภทข้อมูลดั้งเดิม ซึ่งหมายความว่าเราสามารถจัดเก็บวัตถุของคลาส wrapper ได้ แต่เราไม่สามารถจัดเก็บประเภทข้อมูลดั้งเดิมภายใน ArrayList ตัวอย่างเช่นArrayList<Integer> arr = new ArrayList<Integer>() ; สิ่งนี้ใช้ได้ แต่ArrayList<int> arr = new ArrayList<int>() ; สิ่งนี้ไม่ถูกต้อง
ลองพิจารณาข้อมูลโค้ดที่เขียนด้านล่าง
แม้ว่าเราจะเพิ่มค่า int เป็นประเภทดั้งเดิม แทนที่จะเป็นอ็อบเจกต์จำนวนเต็ม แต่โค้ดก็คอมไพล์สำเร็จและไม่สร้างข้อผิดพลาดในการคอมไพล์ เนื่องจากคอมไพเลอร์ JVM แปลงรหัสก่อนหน้าเป็นรหัสต่อไปนี้ :
ที่นี่ การแปลง int primitive type เป็น Integer wrapper class ระหว่างการดำเนินการเพิ่มเรียกว่า Autoboxing
แกะกล่อง:
Unboxing เป็นคุณสมบัติใน java ที่แปลงวัตถุคลาส wrapper เป็นประเภทข้อมูลดั้งเดิมที่สอดคล้องกันโดยอัตโนมัติ ตัวอย่างเช่น การแปลง Integer เป็น int, Double เป็น double เป็นต้น
Unboxing เป็นกระบวนการย้อนกลับของ Autoboxing
สิ่งนี้จะมีประโยชน์ที่ไหนระหว่างการฝึกเขียนโค้ด
การแกะกล่องช่วยโปรแกรมเมอร์ เนื่องจากจะทำให้การดำเนินการบางอย่าง เช่น การดำเนินการทางคณิตศาสตร์บนโครงสร้างข้อมูลที่จัดเก็บวัตถุคลาส wrapper เช่น รายการ เป็นเรื่องง่าย ตัวอย่างเช่น:
แม้ว่าค่าที่เก็บอยู่ภายในรายการ (arr) จะเป็นประเภทจำนวนเต็ม ในขณะที่เรากำลังเพิ่มค่าเหล่านั้นให้กับผลรวมของตัวแปรประเภท int ค่าจำนวนเต็มจะถูกแปลงเป็น int โดยอัตโนมัติ ซึ่งจะทำให้โปรแกรมเมอร์สามารถดำเนินการทางคณิตศาสตร์ได้ง่าย
โค้ดคอมไพล์สำเร็จและไม่สร้างข้อผิดพลาดในการคอมไพล์ เนื่องจากคอมไพเลอร์ JVM แปลงรหัสก่อนหน้าเป็นรหัสต่อไปนี้ :
ที่นี่ การแปลง int (ประเภทดั้งเดิม) เป็น Integer (วัตถุคลาส Wrapper) เรียกว่า Unboxing
ตารางต่อไปนี้มีประโยชน์เนื่องจากแสดงประเภทข้อมูลดั้งเดิมพร้อมคลาสของ wrapper ที่สอดคล้องกัน





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)