Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Tại sao cần Wrapper Class trong Java?

Wrapper class là lớp chứa các kiểu dữ liệu nguyên thủy (int, char, short, byte, v.v.). Nói cách khác, wrapper class cung cấp cách sử dụng kiểu dữ liệu nguyên thủy như đối tượng (objects). Các wrapper class nằm trong package java.lang (không phải java.util như bài gốc nhầm).

Tại sao cần Wrapper Class

  • Chuyển kiểu nguyên thủy thành đối tượng. Đối tượng cần thiết nếu muốn sửa đổi đối số truyền vào phương thức (vì nguyên thủy truyền bằng giá trị - pass by value).
  • Các lớp trong java.util package (Collection framework) chỉ xử lý đối tượng, wrapper class giúp trường hợp này.
  • Cấu trúc dữ liệu trong Collection framework như ArrayList, Vector chỉ lưu đối tượng (reference types), không lưu kiểu nguyên thủy.
  • Đối tượng cần thiết để hỗ trợ đồng bộ hóa (synchronization) trong đa luồng (multithreading).

Triển khai Wrapper Class trong Java

Autoboxing (Tự động đóng gói)

Chuyển kiểu nguyên thủy thành đối tượng tương ứng.

public class AutoBoxingTest { 
    public static void main(String args[]) { 
        int num = 10; // int primitive 
        Integer obj = Integer.valueOf(num); // tạo wrapper object 
        System.out.println(num + " " + obj); 
    } 
}

Kết quả

10 10

Unboxing (Tự động mở gói)

Chuyển đối tượng Wrapper class thành kiểu nguyên thủy tương ứng.

public class UnboxingTest { 
    public static void main(String args[]) { 
        Integer obj = new Integer(10); // Tạo Wrapper object 
        int num = obj.intValue(); // Chuyển về primitive 
        System.out.println(num + " " + obj); 
    } 
}

Kết quả

10 10

Bảng 8 Wrapper Class

PrimitiveWrapper ClassConstructor (Deprecated Java 9+)Factory Method
booleanBooleanBoolean(boolean)Boolean.valueOf(boolean)
byteByteByte(byte)Byte.valueOf(byte)
charCharacterCharacter(char)Character.valueOf(char)
shortShortShort(short)Short.valueOf(short)
intIntegerInteger(int)Integer.valueOf(int)
longLongLong(long)Long.valueOf(long)
floatFloatFloat(float)Float.valueOf(float)
doubleDoubleDouble(double)Double.valueOf(double)

Lưu ý: Từ Java 9, constructor của wrapper class bị @Deprecated, nên dùng valueOf() (có caching cho giá trị nhỏ).