- 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); // -2147483648
SIZE และ 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 บิตที่เป็น 1
highestOneBit()
คืนค่าโดยเก็บเฉพาะบิตที่สูงที่สุดที่เป็น 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)
→ คืนค่าint
valueOf(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)); // true
Q4. ถ้า 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); // -2147483648
Q6. ทำไมคอลเลกชันถึงใช้ int
ไม่ได้?
A. เพราะคอลเลกชันใน Java รองรับเฉพาะออบเจกต์ primitive type ใช้ไม่ได้ จึงต้องใช้ Integer
List<Integer> list = new ArrayList<>();
list.add(123); // int จะถูกแปลงเป็น Integer อัตโนมัติ
Q7. ด้านประสิทธิภาพ ควรใช้ int
หรือ Integer
?
A. ถ้าต้องการความเร็วสูงและใช้กับข้อมูลจำนวนมาก ให้ใช้ int
เพราะทำงานเร็วกว่าและใช้หน่วยความจำน้อยกว่า แต่ถ้าต้องการความยืดหยุ่น ใช้งานกับคอลเลกชัน หรือรองรับค่า null
ควรใช้ Integer