Java 包装类

Java 中,包装类(Wrapper Classes)是为了将基本数据类型(如 int、char、double 等)包装成对象而创建的类。它们是 Java 提供的一组类,使得基本数据类型可以作为对象进行处理。包装类在 Java 中广泛应用,尤其是在集合框架和泛型中,因为 Java 的集合类只能存储对象,而不能存储基本数据类型。本文主要介绍Java 包装类。

1、Java 包装类

Java有8种基本数据类型:整型(byteshortintlong)、浮点型(floatdouble)、布尔型boolean、字符型char,相对应地,Java提供了8种包装类ByteShortIntegerLongFloatDoubleBooleanCharacter。包装类创建对象的方式就跟其他类一样。包装类提供了一种使用原始数据类型作为对象的方法。

下表是原始类型和对应的包装类:

原始数据类型

包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

boolean

Boolean

char

Character

有时必须使用包装类,如在使用Collection对象时,例如,作为ArrayList,其中不能使用基本类型(列表只能存储对象):

例如:

ArrayList<int> myNumbers = new ArrayList<int>(); // 报错
ArrayList<Integer> myNumbers = new ArrayList<Integer>(); // 正常创建方法

2、创建包装类对象

要创建包装类对象,需要使用包装类而不是原始类型。要获取值,可以只打印输出对象:

例如:

public class Main {
  public static void main(String[] args) {
    Integer myInt = 8;
    Double myDouble = 8.99;
    Character myChar = 'A';
    System.out.println(myInt);
    System.out.println(myDouble);
    System.out.println(myChar);
  }
}

由于使用的是包装类对象,因此可以使用某些方法来获取有关特定对象的信息。

例如,以下方法用于获取与 相应的包装对象:intValue()byteValue()shortValue()longValue()floatValue()doubleValue()charValue()booleanValue()

下面示例将输出与以上示例相同的结果:

例如:

public class Main {
  public static void main(String[] args) {
    Integer myInt = 2;
    Double myDouble = 9.99;
    Character myChar = 'A';
    System.out.println(myInt.intValue());
    System.out.println(myDouble.doubleValue());
    System.out.println(myChar.charValue());
  }
}

另一个有用的方法是toString()方法,该方法用于将包装器对象转换为字符串。

在下面的示例中,我们将Integer转换为String,并使用String对象的length()方法输出字符串的长度:

例如:

public class Main {
  public static void main(String[] args) {
    Integer myInt = 100;
    String myString = myInt.toString();
    System.out.println(myString.length());
  }
}

3、装箱和拆箱

基本数据类型转换为包装类的过程称为装箱,如把 int 包装成 Integer 类的对象;包装类变为基本数据类型的过程称为拆箱,如把 Integer 类的对象重新简化为 int

例如,

public class Main {
    public static void main(String[] args) {
        int m = 100;
        Integer obj = m;  // 自动装箱
        int n = obj;  // 自动拆箱
        System.out.println("n = " + n);
      
        Integer obj1 = 100;
        System.out.println("obj等价于obj1返回结果为" + obj.equals(obj1));
    }
}

4、包装类与集合类

在集合类(如 ListSetMap)中只能存储对象,不能存储基本数据类型,因此在存储基本数据类型时,必须使用其对应的包装类。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10);  // 自动装箱:int -> Integer
        list.add(20);
        list.add(30);

        // 遍历集合并输出
        for (Integer i : list) {
            System.out.println(i);
        }
    }
}

5、Boolean 包装类的特殊性

Boolean 是 Java 中的一个特殊包装类,因为它的值只能是 truefalse,而不能是其他任何值。它还提供了 parseBoolean 方法来将字符串转换为 boolean

public class Main {
    public static void main(String[] args) {
        Boolean boolObj = Boolean.valueOf("true");
        boolean b = boolObj.booleanValue();
        
        System.out.println("Boolean 对象: " + boolObj);
        System.out.println("转换后的 boolean: " + b);
    }
}

推荐阅读
cjavapy编程之路首页