Autoboxing (ไม่เปลี่ยนรูป) - 1

“สวัสดี อามีโก้!”

"วันนี้ผมจะมาพูดถึงautoboxingครับautoboxingหมายถึงการใส่อะไรลงไปในกล่องโดยอัตโนมัติ"

"คุณจะจำได้ว่า Java มีประเภทที่สืบทอดคลาส Object เช่นเดียวกับประเภทดั้งเดิม แต่กลับกลายเป็นว่าสิ่งที่สะดวกอย่างคอลเลกชันและทั่วไปใช้งานได้เฉพาะกับประเภทที่สืบทอด Object"

"จากนั้นจึงตัดสินใจที่จะสร้างคู่ที่ไม่ใช่แบบดั้งเดิมของประเภทดั้งเดิมทุกประเภท"

ประเภทดึกดำบรรพ์ คู่ที่ไม่ใช่ดั้งเดิม
ไบต์ ไบต์
สั้น สั้น
นานาชาติ จำนวนเต็ม
ยาว ยาว
ลอย ลอย
สองเท่า สองเท่า
บูลีน บูลีน
ถ่าน อักขระ
เป็นโมฆะ เป็นโมฆะ

"แต่ไม่สะดวกอย่างยิ่งที่จะแปลงระหว่างประเภทเหล่านี้ตลอดเวลา:"

int x = 3;
Integer y = new Integer(x + 1);
int z = y.intValue();

"โดยเฉพาะอย่างยิ่งเมื่อทำงานกับคอลเลกชันโดยตรง:"

ตัวอย่าง
int[] numbers = new int[10];
ArrayList list = new ArrayList();
for (int i = 0; i < numbers.length; i++)
{
 list.add( new Integer(i));
}

"นั่นเป็นเหตุผลที่ผู้สร้างของ Java คิดค้น «การทำกล่องอัตโนมัติ» ของประเภทดั้งเดิมและ 'แกะกล่อง' กับคู่ที่ไม่ใช่แบบดั้งเดิม"

"นี่คือวิธีการทำงาน:

คุณเห็นอะไร เกิดอะไรขึ้นจริงๆ
int x = 3;
Integer y = x + 1;
int x = 3;
Integer y = Integer.valueOf(x + 1);
int z = y;
int z = y.intValue();
Boolean b = Boolean.FALSE;
boolean a = b;
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
Integer x = null;
int y = x;
Integer x = null; int y = x.intValue(); //Throws an exception

"มันง่ายมาก คุณสามารถกำหนดประเภท int และจำนวนเต็มให้กันและกันได้ และคอมไพเลอร์จะดูแลทุกอย่างที่เหลือเอง"

"นั่นสะดวกมาก"

"ใช่ แต่มีความแตกต่างที่ฉันจะพูดถึงในภายหลัง"