- 1 1. บทนำ
- 2 2. คลาส Integer คืออะไร?
- 3 3. ฟิลด์และค่าคงที่สำคัญของคลาส Integer
- 4 4. เมธอดหลักของคลาส Integer
- 5 5. การเลือกใช้ int กับ Integer
- 6 6. ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
- 7 7. ตัวอย่างการใช้งานจริงของ Integer
- 8 8. สรุป
- 9 คำถามที่พบบ่อย (FAQ)
- 9.1 Q1. ความแตกต่างระหว่าง int และ Integer คืออะไร?
- 9.2 Q2. parseInt() ต่างจาก valueOf() อย่างไร?
- 9.3 Q3. ทำไมไม่ควรใช้ == ในการเปรียบเทียบ Integer?
- 9.4 Q4. ถ้า Integer เก็บค่า null แล้ว unboxing จะเกิดอะไรขึ้น?
- 9.5 Q5. จะดูค่ามากที่สุดและน้อยที่สุดของ Integer ได้อย่างไร?
- 9.6 Q6. ทำไมคอลเลกชันถึงใช้ int ไม่ได้?
- 9.7 Q7. ด้านประสิทธิภาพ ควรใช้ int หรือ Integer?
1. บทนำ
พื้นฐานของประเภทจำนวนเต็ม (int) ใน Java
ในภาษา Java เมื่อเราต้องการจัดการกับตัวเลข หนึ่งในประเภทพื้นฐานที่สำคัญที่สุดคือ จำนวนเต็ม (int) ซึ่งเป็นประเภทข้อมูลแบบ primitive ที่ใช้บ่อยในการคำนวณเชิงตัวเลข การใช้ int จะช่วยให้การทำงานมีประสิทธิภาพด้านหน่วยความจำและความเร็วสูง
ในอีกด้านหนึ่ง Java ยังมี คลาส Integer ซึ่งเป็น คลาสห่อหุ้ม (Wrapper Class) สำหรับค่า int ทำให้ค่าจำนวนเต็มสามารถถูกจัดการเป็นออบเจกต์ได้ สอดคล้องกับแนวคิดการออกแบบเชิงวัตถุของ Java
แม้ว่าจะดูคล้ายกัน แต่ int และ Integer มีความแตกต่างชัดเจนทั้งในด้านวัตถุประสงค์และพฤติกรรม จึงไม่น่าแปลกใจที่ผู้เริ่มต้นมักจะมีคำถาม เช่น “int และ Integer ต่างกันอย่างไร?” หรือ “ควรเลือกใช้อย่างไร?”
ทำไมต้องเรียนรู้คลาส Integer
ในการใช้งาน Java จริง มีหลายกรณีที่ int ไม่สามารถตอบโจทย์ได้ เช่น การทำงานร่วมกับคอลเลกชัน (List, Map), การจัดการค่า null และเจเนอริก ซึ่งในกรณีเหล่านี้ จำเป็นต้องใช้คลาส Integer
นอกจากนี้ คลาส Integer ยังมีเมธอดที่มีประโยชน์ เช่น การแปลงข้อความเป็นตัวเลข การเปรียบเทียบ และการจัดการบิต การเรียนรู้วิธีใช้เหล่านี้จะช่วยให้คุณเขียนโค้ดที่อ่านง่ายและมีความเสถียรมากขึ้น
บทความนี้จะอธิบายความแตกต่างระหว่าง int และ Integer วิธีใช้งานจริง และกรณีตัวอย่างที่เหมาะสม ทั้งสำหรับผู้เริ่มต้นและผู้ที่มีพื้นฐาน Java อยู่แล้ว
2. คลาส Integer คืออะไร?
บทบาทในฐานะคลาสห่อหุ้ม (Wrapper Class)
Integer ในภาษา Java เป็น คลาสห่อหุ้ม สำหรับ int ที่เป็น primitive type คลาสห่อหุ้ม (Wrapper) คือสิ่งที่ทำหน้าที่ “ห่อ” ค่าพื้นฐานเพื่อให้ใช้งานเป็นออบเจกต์ได้ ในที่นี้ int ที่เป็นค่าจำนวนเต็มดิบ จะถูกห่อใน Integer ทำให้สามารถจัดการในรูปแบบออบเจกต์ได้
ตัวอย่างเช่น คอลเลกชันของ Java (เช่น List หรือ Map) รองรับเฉพาะออบเจกต์เท่านั้น จึงไม่สามารถใช้ int ได้โดยตรง จำเป็นต้องใช้ Integer แทน
List<Integer> numbers = new ArrayList<>();
numbers.add(10); // ค่า int 10 จะถูกแปลงเป็น Integer โดยอัตโนมัติการแปลง int เป็นออบเจกต์ (boxing) ทำให้สามารถทำงานร่วมกับ API และเฟรมเวิร์กต่างๆ ของ Java ได้อย่างราบรื่น
ออโต้บ็อกซิ่ง และ อันบ็อกซิ่ง
ตั้งแต่ Java 5 เป็นต้นมา ได้เพิ่มความสามารถของ ออโต้บ็อกซิ่ง (auto-boxing) และ อันบ็อกซิ่ง (unboxing) ซึ่งช่วยให้นักพัฒนาเขียนโค้ดได้ง่ายขึ้น
- ออโต้บ็อกซิ่ง: ค่า
intจะถูกแปลงเป็นIntegerโดยอัตโนมัติ - อันบ็อกซิ่ง: ออบเจกต์
Integerจะถูกแปลงกลับเป็นintโดยอัตโนมัติ
Integer num = 100; // ออโต้บ็อกซิ่ง
int result = num + 50; // อันบ็อกซิ่งแล้วนำไปคำนวณด้วยคุณสมบัตินี้ นักพัฒนาไม่จำเป็นต้องเขียนโค้ดเพื่อแปลงประเภทเอง ทำให้โค้ดอ่านง่ายและสะดวกมากขึ้น อย่างไรก็ตาม หากพยายามอันบ็อกซิ่งค่า null จะเกิด NullPointerException
Integer value = null;
int x = value; // จะเกิดข้อยกเว้นที่นี่ความหมายที่แท้จริงของ Integer
Integer ไม่ได้เป็นเพียงแค่ตัวแทนของ int เท่านั้น แต่เพราะเป็นออบเจกต์ จึงมีคุณสมบัติพิเศษเพิ่มเติม เช่น:
- สามารถจัดการกับค่า
nullได้ เพื่อแทนสถานะ “ยังไม่ถูกกำหนด” - มีเมธอดต่างๆ ให้ใช้งาน ทำให้เขียนโค้ดได้ยืดหยุ่นมากขึ้น
- ใช้งานร่วมกับโครงสร้างที่ต้องการออบเจกต์ เช่น คอลเลกชัน
ดังนั้น ในหลายบริบทที่ต้องใช้การเขียนโปรแกรมเชิงวัตถุ Integer จึงเหมาะสมกว่าการใช้ int
3. ฟิลด์และค่าคงที่สำคัญของคลาส Integer
คลาส Integer ใน Java มีการกำหนด ค่าคงที่ที่สำคัญ และ ฟิลด์สำหรับดึงข้อมูล ซึ่งช่วยให้โค้ดมีความอ่านง่ายและบำรุงรักษาได้สะดวกขึ้น
ต่อไปนี้คือฟิลด์ที่ใช้บ่อย:
MAX_VALUE และ MIN_VALUE
Integer.MAX_VALUE และ Integer.MIN_VALUE ใช้ระบุ ค่ามากที่สุด และ ค่าน้อยที่สุด ที่ int สามารถเก็บได้
MAX_VALUE: 2,147,483,647 (2^31 – 1)MIN_VALUE: -2,147,483,648 (-2^31)
มักใช้สำหรับตรวจสอบขอบเขตหรือป้องกันการ overflow
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("ค่าสูงสุด: " + max); // 2147483647
System.out.println("ค่าต่ำสุด: " + min); // -2147483648SIZE และ BYTES
SIZE และ BYTES ระบุ จำนวนบิต และ จำนวนไบต์ ที่ int ใช้
Integer.SIZE: 32 บิตInteger.BYTES: 4 ไบต์
System.out.println("จำนวนบิตของ int: " + Integer.SIZE); // 32
System.out.println("จำนวนไบต์ของ int: " + Integer.BYTES); // 4ฟิลด์ TYPE
Integer.TYPE คือ ออบเจกต์ Class ที่แทนประเภท int โดยมักใช้ในเทคนิคขั้นสูง เช่น การสะท้อน (Reflection) และ Generics
Class<?> clazz = Integer.TYPE;
System.out.println(clazz.getName()); // intแม้จะไม่ค่อยใช้ในการพัฒนาทั่วไป แต่เป็นความรู้ที่มีประโยชน์สำหรับผู้ที่สนใจโครงสร้างภายในของ Java
ค่าคงที่เหล่านี้ถูกกำหนดเป็น static final จึงสามารถเข้าถึงได้โดยตรง โดยไม่ต้องสร้างอินสแตนซ์ของ Integer
4. เมธอดหลักของคลาส Integer
Integer ไม่ได้มีไว้เพียงเพื่อห่อหุ้มค่า int เท่านั้น แต่ยังมีเมธอดที่มีประโยชน์มากมาย เช่น การแปลงข้อความกับตัวเลข การเปรียบเทียบ และการจัดการบิต ซึ่งใช้บ่อยในการพัฒนา Java ประจำวัน ต่อไปนี้คือเมธอดที่นิยมใช้ แบ่งตามหมวดหมู่
เมธอดแปลงตัวเลข
parseInt()
parseInt() เป็นเมธอดแบบ static ที่ใช้สำหรับ แปลง String ให้เป็น int มักใช้เวลารับค่าจากผู้ใช้หรือไฟล์ภายนอก
String str = "123";
int number = Integer.parseInt(str); // 123* หาก String ไม่ใช่ตัวเลข จะเกิด NumberFormatException ดังนั้นควรใช้ try-catch ครอบ
valueOf()
valueOf() ใช้ แปลง String หรือ int ให้เป็นออบเจกต์ Integer แตกต่างจาก parseInt() ตรงที่ผลลัพธ์เป็น Integer ไม่ใช่ int
Integer num1 = Integer.valueOf("456");
Integer num2 = Integer.valueOf(789);Integer.valueOf() มีการใช้ cache สำหรับค่าระหว่าง -128 ถึง 127 ทำให้มีประสิทธิภาพมากกว่าการสร้างอินสแตนซ์ใหม่ด้วย new
เมธอดแสดงผลและแปลงค่า
toString()
toString() ใช้สำหรับ แปลงค่าตัวเลขเป็น String นิยมใช้เมื่อเชื่อมข้อความหรือพิมพ์ออกหน้าจอ
int number = 100;
String str = Integer.toString(number); // "100"ยังสามารถแปลงเป็นฐานอื่นๆ เช่น ฐาน 2 หรือฐาน 16 ได้
System.out.println(Integer.toBinaryString(10)); // "1010"
System.out.println(Integer.toHexString(255)); // "ff"เมธอดเปรียบเทียบ
compareTo()
compareTo() ใช้ เปรียบเทียบ Integer สองค่า และคืนค่าจำนวนเต็มเพื่อระบุความสัมพันธ์
Integer a = 10;
Integer b = 20;
int result = a.compareTo(b); // -1 (ถ้า a < b)equals()
equals() ใช้ ตรวจสอบความเท่ากันของค่า ต่างจาก == ที่ตรวจสอบการอ้างอิงออบเจกต์
Integer x = 100;
Integer y = 100;
System.out.println(x.equals(y)); // trueเมธอดจัดการบิต
คลาส Integer รองรับการทำงานระดับบิตที่มีประโยชน์ในการเขียนโปรแกรมระดับล่าง
bitCount()
คืนจำนวนบิตที่เป็น 1 ของค่าที่ระบุ
int count = Integer.bitCount(15); // 15 = 1111 → มี 4 บิตที่เป็น 1highestOneBit()
คืนค่าโดยเก็บเฉพาะบิตที่สูงที่สุดที่เป็น 1
int highest = Integer.highestOneBit(10); // 10 (1010) → 8 (1000)เมธอดอื่นๆ ที่มีประโยชน์
Integer.reverse(int): กลับลำดับบิตซ้ายขวาInteger.signum(int): ตรวจสอบเครื่องหมาย (บวก: 1, ลบ: -1, ศูนย์: 0)Integer.hashCode(): คืนค่าแฮชโค้ด (สำคัญเมื่อใช้กับคอลเลกชัน)
การรู้จักเมธอดเหล่านี้ช่วยให้เขียนโค้ดได้ กระชับ มีประสิทธิภาพ และอ่านง่าย
5. การเลือกใช้ int กับ Integer
แม้ว่า int และ Integer จะใช้แทนจำนวนเต็มเหมือนกัน แต่มีความแตกต่างในด้าน ประสิทธิภาพ ความยืดหยุ่น และข้อจำกัด หากใช้ไม่ถูกต้องอาจทำให้เกิดข้อผิดพลาดหรือทำงานช้าลง
ความแตกต่างด้านประสิทธิภาพ
int เป็น primitive type ที่มีขนาดคงที่ 4 ไบต์และทำงานได้เร็ว ส่วน Integer เป็นออบเจกต์ที่เก็บใน heap memory มี overhead เพิ่มเติม
int a = 10;
Integer b = 10;แม้ค่าจะเหมือนกัน แต่กระบวนการทำงานต่างกัน หากต้องประมวลผลจำนวนมาก เช่น ใน loop ควรเลือกใช้ int เพื่อความเร็วและประหยัดหน่วยความจำ
ตัวอย่าง: ความแตกต่างของความเร็วในลูป
long startTime = System.nanoTime();
int sum = 0;
for (int i = 0; i < 1000000; i++) {
sum += i;
}
long endTime = System.nanoTime();
System.out.println("เวลาใช้ int: " + (endTime - startTime) + " ns");หากใช้ Integer จะมีการ boxing/unboxing ทำให้ช้าลงหลายเท่า
ความแตกต่างด้าน null และการจัดการข้อผิดพลาด
int ไม่สามารถเก็บค่า null ได้ แต่ Integer สามารถเก็บได้ เหมาะกับกรณีที่ต้องการแทนค่าว่างหรือไม่กำหนด
Integer value = null;
if (value == null) {
System.out.println("ยังไม่ได้กำหนดค่า");
}อย่างไรก็ตาม หาก unboxing ค่า null จะเกิด NullPointerException
การทำงานร่วมกับคอลเลกชัน
คอลเลกชันใน Java (เช่น List, Map) รองรับเฉพาะออบเจกต์ ดังนั้นจึงต้องใช้ Integer
List<Integer> numbers = new ArrayList<>();
numbers.add(100); // int จะถูกแปลงเป็น Integer โดยอัตโนมัติเจเนอริกก็เช่นกัน ไม่สามารถใช้ primitive type ได้
สรุปแนวทางการเลือกใช้
| กรณีใช้งาน | ประเภทที่แนะนำ | เหตุผล |
|---|---|---|
| คำนวณเชิงตัวเลขทั่วไป | int | เร็วและใช้หน่วยความจำน้อย |
| ต้องการตรวจสอบว่ามีค่า/ไม่มีค่า | Integer | สามารถเก็บค่า null ได้ |
| ใช้งานกับคอลเลกชัน/เจเนอริก | Integer | เพราะต้องใช้ออบเจกต์ |
| ใช้ค่าเป็น key ใน Map | Integer | int ใช้ไม่ได้ |
จำง่ายๆ ว่า ถ้าเน้นความเร็ว ใช้ int แต่ถ้าเน้นความยืดหยุ่น ใช้ Integer
6. ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
การเกิด NullPointerException
สาเหตุ:
Integer เป็นออบเจกต์ จึงสามารถเก็บค่า null ได้ แต่เมื่อมีการ unboxing ให้เป็น int จะเกิด NullPointerException
Integer value = null;
int x = value; // จะเกิดข้อยกเว้นที่นี่วิธีแก้:
ตรวจสอบค่า null ก่อน unboxing
if (value != null) {
int x = value;
} else {
int x = 0; // กำหนดค่าเริ่มต้น
}หรือใช้ Optional (Java 8+) เพื่อความปลอดภัย
int x = Optional.ofNullable(value).orElse(0);การเกิด NumberFormatException
สาเหตุ:
เมื่อใช้ Integer.parseInt() หรือ Integer.valueOf() กับ String ที่ไม่ใช่ตัวเลข
String input = "abc";
int num = Integer.parseInt(input); // NumberFormatExceptionวิธีแก้:
ตรวจสอบรูปแบบอินพุตด้วย regex หรือใช้ try-catch
if (input.matches("-?\\d+")) {
int num = Integer.parseInt(input);
} else {
System.out.println("ไม่ใช่ตัวเลข");
}try {
int num = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("รูปแบบไม่ถูกต้อง: " + input);
}
การใช้ == และ equals() ผิดพลาด
สาเหตุ:
== ใช้เปรียบเทียบการอ้างอิง ไม่ใช่ค่า ดังนั้นออบเจกต์คนละตัวอาจได้ false แม้ค่าจะเท่ากัน
Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true* สำหรับค่าระหว่าง -128 ถึง 127 จะถูก cache ทำให้ == อาจได้ true แต่ไม่ควรพึ่งพาพฤติกรรมนี้
วิธีแก้:
ใช้ equals() เสมอเมื่อเปรียบเทียบค่า
if (a.equals(b)) {
System.out.println("ค่าเท่ากัน");
}หรือ unboxing ให้เป็น int ก่อนเปรียบเทียบ
if (a.intValue() == b.intValue()) {
System.out.println("ค่า int เท่ากัน");
}การละเลย overflow
สาเหตุ:
int และ Integer เก็บได้เพียงค่าในช่วง ±2,147,483,647 หากเกินขอบเขตจะเกิด overflow
int a = Integer.MAX_VALUE;
int b = a + 1;
System.out.println(b); // -2147483648วิธีแก้:
ใช้ long หรือ BigInteger เมื่อจำเป็น และเขียนโค้ดโดยคำนึงถึงขอบเขต
สรุป
Integer แม้จะยืดหยุ่นและมีประโยชน์ แต่ก็มีข้อควรระวัง เช่น null, การอ้างอิง, การแปลงประเภท ผู้เริ่มต้นควรทำความเข้าใจสาเหตุของข้อยกเว้นให้ชัดเจน
การรู้ข้อผิดพลาดล่วงหน้าช่วยลดบั๊กและทำให้โค้ดมีความเสถียรมากขึ้น
7. ตัวอย่างการใช้งานจริงของ Integer
หลังจากเรียนรู้คุณสมบัติของ Integer แล้ว มาดูกันว่าใช้จริงได้อย่างไรในสถานการณ์ต่างๆ
การแปลงค่าจากอินพุตผู้ใช้
ในแอปพลิเคชัน ค่าจากผู้ใช้มักจะเป็น String เช่น อายุหรือจำนวนสินค้า จำเป็นต้องแปลงเป็นจำนวนเต็ม
String input = "25";
try {
Integer age = Integer.valueOf(input);
System.out.println("อายุ: " + age);
} catch (NumberFormatException e) {
System.out.println("อินพุตไม่ถูกต้อง");
}การจัดการค่าการตั้งค่าและ environment variables
เมื่อโหลดค่าการตั้งค่าจากภายนอก (เช่น properties) มักจะอยู่ในรูป String ต้องแปลงเป็นตัวเลขก่อน
String maxConn = System.getProperty("app.maxConnections", "100");
int max = Integer.parseInt(maxConn);
System.out.println("จำนวนการเชื่อมต่อสูงสุด: " + max);การใช้งานกับคอลเลกชัน
เมื่อเก็บค่าจำนวนเต็มใน List หรือ Map จำเป็นต้องใช้ Integer
List<Integer> ids = new ArrayList<>();
ids.add(101);
ids.add(205);
ids.add(309);
for (Integer id : ids) {
System.out.println("กำลังประมวลผล ID: " + id);
}การใช้บิตสำหรับจัดการสถานะ
สามารถใช้ Integer ในการจัดการ flag หรือ state ด้วยการคำนวณบิต
int flags = 0;
flags |= 0b0001; // เปิดบิตที่ 1
flags |= 0b0010; // เปิดบิตที่ 2
boolean isSet = (flags & 0b0010) != 0;
System.out.println("บิตที่ 2: " + (isSet ? "ON" : "OFF"));System.out.println("สถานะปัจจุบัน: " + Integer.toBinaryString(flags));การทำงานร่วมกับฐานข้อมูล
เมื่อใช้ JDBC หากคอลัมน์ในฐานข้อมูลสามารถเป็น null ได้ ควรใช้ Integer แทน int
ResultSet rs = stmt.executeQuery("SELECT age FROM users WHERE id = 1");
if (rs.next()) {
Integer age = (Integer) rs.getObject("age");
System.out.println(age != null ? "อายุ: " + age : "ยังไม่ได้บันทึกอายุ");
}สรุป
Integer ไม่ได้เป็นเพียงตัวห่อหุ้มของ int แต่ช่วยให้:
- แปลงค่าจากอินพุตหรือการตั้งค่าได้ง่าย
- จัดการค่า
nullได้ - ใช้กับคอลเลกชันได้
- จัดการสถานะด้วยบิตได้
หากใช้อย่างเหมาะสม จะช่วยเพิ่ม ความยืดหยุ่น ความเสถียร และการบำรุงรักษาโค้ด
8. สรุป
คลาส Integer ใน Java ไม่ได้เป็นเพียงตัวแทนของ int แต่เป็น คลาสสำคัญที่เกี่ยวข้องกับแนวคิดเชิงวัตถุของภาษา Java โดยตรง บทความนี้ได้อธิบายจุดสำคัญต่างๆ ไว้อย่างเข้าใจง่ายและนำไปใช้จริงได้
ข้อดีของคลาส Integer
- จัดการในรูปแบบออบเจกต์ ทำให้รองรับค่า
nullและใช้งานกับคอลเลกชันได้ - มีเมธอดที่มีประโยชน์ เช่น การแปลง String การเปรียบเทียบ และการคำนวณบิต
- ทำงานได้ดีกับ System.getProperty() และฐานข้อมูล
- รองรับกลไก cache และ auto-boxing ทำให้โค้ดกระชับ
ข้อควรระวัง
- การ unboxing ค่า
nullจะทำให้เกิดNullPointerException - การใช้
==กับ Integer อาจได้ผลลัพธ์ไม่ตรงตามที่คาด ควรใช้equals() - การประมวลผลจำนวนมาก
intทำงานได้เร็วกว่า
แนวทางการเลือกใช้
| กรณีใช้งาน | ประเภทที่แนะนำ | เหตุผล |
|---|---|---|
| การคำนวณตัวเลขที่ต้องการความเร็ว | int | รวดเร็วและใช้หน่วยความจำน้อย |
ข้อมูลที่อาจมีค่า null | Integer | รองรับค่า null ได้ |
| ใช้งานร่วมกับคอลเลกชันหรือเจเนอริก | Integer | ต้องใช้ออบเจกต์ |
| ใช้เป็น key ใน Map | Integer | int ใช้ไม่ได้ |
สรุปสุดท้าย
การเข้าใจ Integer ไม่เพียงช่วยให้เขียนโค้ดที่ปลอดภัยขึ้น แต่ยังเป็นพื้นฐานของ การเขียนโปรแกรมเชิงวัตถุ การจัดการข้อยกเว้น และการเพิ่มประสิทธิภาพ ผู้เริ่มต้นควรเรียนรู้ตั้งแต่เนิ่นๆ เพราะ int และ Integer เป็นสิ่งที่เจอบ่อยมากในการพัฒนา Java
คำถามที่พบบ่อย (FAQ)
Q1. ความแตกต่างระหว่าง int และ Integer คืออะไร?
A. int เป็น primitive type ใช้สำหรับคำนวณที่รวดเร็วและประหยัดหน่วยความจำ ส่วน Integer เป็น คลาสห่อหุ้ม ที่ทำให้สามารถใช้งานค่าจำนวนเต็มเป็นออบเจกต์ รองรับ null และมีเมธอดเสริม
Q2. parseInt() ต่างจาก valueOf() อย่างไร?
A.
parseInt(String s)→ คืนค่าintvalueOf(String s)→ คืนค่าInteger
หากต้องการออบเจกต์หรือจัดการค่า null ควรใช้ valueOf()
Q3. ทำไมไม่ควรใช้ == ในการเปรียบเทียบ Integer?
A. เพราะ == ตรวจสอบการอ้างอิงออบเจกต์ ไม่ใช่ค่า แม้ค่าจะเท่ากันแต่ถ้าเป็นอินสแตนซ์ต่างกันจะได้ false ควรใช้ equals()
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // trueQ4. ถ้า Integer เก็บค่า null แล้ว unboxing จะเกิดอะไรขึ้น?
A. จะเกิด NullPointerException เพราะ null ไม่สามารถแปลงเป็น int ได้ ต้องตรวจสอบก่อนเสมอ
Integer val = null;
int num = val; // จะเกิดข้อยกเว้นQ5. จะดูค่ามากที่สุดและน้อยที่สุดของ Integer ได้อย่างไร?
A. ใช้ Integer.MAX_VALUE และ Integer.MIN_VALUE
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648Q6. ทำไมคอลเลกชันถึงใช้ int ไม่ได้?
A. เพราะคอลเลกชันใน Java รองรับเฉพาะออบเจกต์ primitive type ใช้ไม่ได้ จึงต้องใช้ Integer
List<Integer> list = new ArrayList<>();
list.add(123); // int จะถูกแปลงเป็น Integer อัตโนมัติQ7. ด้านประสิทธิภาพ ควรใช้ int หรือ Integer?
A. ถ้าต้องการความเร็วสูงและใช้กับข้อมูลจำนวนมาก ให้ใช้ int เพราะทำงานเร็วกว่าและใช้หน่วยความจำน้อยกว่า แต่ถ้าต้องการความยืดหยุ่น ใช้งานกับคอลเลกชัน หรือรองรับค่า null ควรใช้ Integer


