Wrapper classes

ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Jim White

Java Developer

Java 8 primitives

8 ชนิดข้อมูลพื้นฐาน (primitive) ใน Java ซึ่งเป็นรากฐานของข้อมูลทุกประเภท

ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper classes

  • ชนิด primitive แต่ละชนิดมี wrapper class คู่กัน
primitive Wrapper Class
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

Wrapper classes ช่วยให้ใช้ primitive เป็น object ได้ โดยเป็น subclass ของ Object

ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

การ wrap ค่า primitive

  • instance ของ wrapper class เก็บค่า primitive ได้หนึ่งค่า
    • ตัวอย่าง: Integer เก็บค่า primitive ชนิด int หนึ่งค่า

Wrapper object เก็บค่า primitive ไว้ภายใน

ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

รายละเอียด Wrapper

  • Wrapper classes มี fields และ methods เพิ่มเติม
    • Fields สำหรับข้อมูลเกี่ยวกับชนิดนั้น (เช่น ค่าสูงสุด)
    • Methods สำหรับทำงานกับ primitive ที่ wrap ไว้
  • Wrapper classes อยู่ใน base language
    • ใช้งานได้โดยไม่ต้อง import (จะเรียนเรื่อง import เพิ่มเติมภายหลัง)
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

การสร้าง wrapper object

  • กำหนดค่า primitive ให้กับตัวแปรชนิด wrapper
    • รูปแบบ: Wrapper-type variable = primitive-value;
Integer age = 12;
Double cost = 150250.55;
Float interest = 5.5f;
Character grade = 'A';
Boolean isActive = true;
  • Wrapper object สามารถมีค่าเป็น (null) ได้
Integer age = null;
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

การใช้งาน wrapper object

Integer age = 12;
  • แสดงผล
    System.out.println(age);    // Displays 12
    
  • ดึงค่า primitive
    int x = age.intValue();     // x is assigned 12
    
  • ทำงานอื่น ๆ กับ object
    double z = age.doubleValue();  //z is 12.0
    String y = age.toString();  // y is assigned "12"
    Integer teenAge = 16;
    int smaller = age.compareTo(teenAge);  // smaller is -1 since 12 < 16
    
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper Static Methods

  • Wrapper classes มี static methods มาให้
  • ใช้สำหรับทำงานกับ primitive ที่เกี่ยวข้อง
    int x = Integer.sum(8,12);  // x is 20
    int y = Integer.remainderUnsigned(102, 10);  // y is 2
    
  • ใช้แปลงระหว่าง String กับ primitive
    int z = Integer.parseInt("123");   // z is 123;
    boolean ans = Boolean.parseBoolean("false");  // ans is false
    
1 See https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html for more on the Integer wrapper
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper Static Fields

ตัวอย่าง static fields บน wrapper classes

System.out.println(Integer.MAX_VALUE); // Maximum value an int can have
System.out.println(Integer.MIN_VALUE); // Minimum value an int can have
2147483647
-2147483648
System.out.println(Boolean.TRUE); // Corresponding to the primitive value of true
System.out.println(Boolean.FALSE); // Corresponding to the primitive value of false
true
false
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper Static Fields

ตัวอย่าง static fields บน wrapper classes

System.out.println(Character.SPACE_SEPARATOR);  // Unicode for the regular space like ' '
System.out.println(Character.LINE_SEPARATOR); // Unicode for line return like '\n'
12
13
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper Methods ที่น่าสนใจ

Wrapper Method Returns
Boolean.logicalAnd(boolean a, boolean b) boolean
Boolean.logicalOr(boolean a, boolean b) boolean
Boolean.parseBoolean(String s) boolean
Character.getNumericValue(char ch) ค่า Unicode int ของ char
Character.isDigit(char ch) boolean
Character.isLowerCase(char ch) boolean
Character.isWhitespace(char ch) boolean
Double.parseDouble(String s) double
Double.longValue() ค่า Double ที่ปัดเศษลง เป็นชนิด Long
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

ทำไมต้องใช้ Wrapper?

  • Primitive ไม่มี methods (มีแค่ operations)
    • Wrapper classes มี methods ที่มีประโยชน์
      int score = Integer.parseInt("8");
      
  • Wrapper ช่วยให้ใช้ primitive เป็น object ได้ เช่น ใส่ใน collection
    • เรียนเรื่อง collections ได้ใน Chapter 2
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Wrapper เป็น null ได้

  • Wrapper ช่วยให้ตัวแปร instance หรือ static ของชนิดนั้นเป็น null ได้
    • ตัวแปร instance หรือ static ชนิด primitive มีค่าเริ่มต้นหากยังไม่ได้กำหนดค่า
int herAge; // age is 0 by default
Integer hisAge = null;
if (hisAge != null) {
  // do something when hisAge is not set
}
ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

มาฝึกกันเถอะ!

ชนิดข้อมูลและการจัดการข้อยกเว้นใน Java

Preparing Video For Download...