首页 > 编程笔记

Java包装类(小白必读)

Java 中的数据类型从本质上看可以分为两类:8 种基本数据类型和引用类型。8 种基本数据类型很好区分,那么什么是引用类型呢?这里大家可简单记住一句话,通过构造函数 new 出来的对象就是引用类型。

基本类型的数据不是对象,引用类型的数据才能称之为对象。我们知道 Java 是面向对象的编程语言,某些场景需要用对象来描述基本类型的数据,如何来实现呢?就是通过包装类来完成的。

包装类是 Java 提供的一组类,专门用来创建 8 种基本数据类型对应的对象。所以我们很容易得出一个结论:包装类一共有 8 个,这些类都保存在 java.lang 包中,基本数据类型对应的包装类如下表所示。

表:Java包装类
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

包装类的体系结构如下图所示。


图 1 包装类的体系结构

装箱与拆箱是包装类的特有名词,装箱是指将基本数据类型转为对应的包装类对象,拆箱指将包装类对象转为对应的基本数据类型。

装箱

1) public Type(type value)

每个包装类都提供了一个有参构造函数:public Type(type value),用来实例化包装类对象,具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        byte b = 1;
        Byte byt = new Byte(b);
        short s = 2;
        Short shor = new Short(s);
        int i = 3;
        Integer integer = new Integer(i);
        long l = 4;
        Long lon = new Long(l);
        float f = 5.5f;
        Float flo = new Float(f);
        double d = 6.6;
        Double dou = new Double(d);
        char cha = 'J';
        Character charac = new Character(cha);
        boolean bo = true;
        Boolean bool = new Boolean(bo);
    }
}

2) public Type(String value)/ public Type(char value)

每个包装类还有一个重载构造函数,Character 类的重载构造函数为:
public Type(char value)
除 Character 类以外的其他的包装类重载构造函数为:
public Type(String value)
具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        Byte byt = new Byte("1");
        Short shor = new Short("2");
        Integer integer = new Integer("3");
        Long lon = new Long("4");
        Float flo = new Float("5.5f");
        Double dou = new Double("6.6");
        Character charac = new Character('J');
        Boolean bool = new Boolean("true");
    }
}
需要注意的是,在 Boolean 类的构造函数中,当参数为 true 时,Boolean 值为 true;当参数不为 true 时,Boolean 值都为 false。

3) valueOf(type value)

每一个包装类都有一个 valueOf(type value) 方法:
public static Type valueOf(type value)
可以将基本数据类型转为包装类类型。

具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        byte b = 1;
        Byte byt = Byte.valueOf(b);
        short s = 2;
        Short shor = Short.valueOf(s);
        int i = 3;
        Integer integer = Integer.valueOf(i);
        long l = 4;
        Long lon = Long.valueOf(l);
        float f = 5.5f;
        Float flo = Float.valueOf(f);
        double d = 6.6;
        Double dou = Double.valueOf(d);
        char cha = 'J';
        Character charac = Character.valueOf(cha);
        boolean bo = true;
        Boolean bool = Boolean.valueOf(bo);
    }
}

4) valueOf(String value)/valueOf(char value)

Character 有一个重载方法:
public static Type valueOf(char value)
可以将 char 类型转为包装类类型。

除 Character 类以外的其他包装类的重载方法:
public static Type valueOf(String value)
可以将 String 类型转为包装类类型。

具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        Byte byt = Byte.valueOf("1");
        Short shor = Short.valueOf("2");
        Integer integer = Integer.valueOf("3");
        Long lon = Long.valueOf("4");
        Float flo = Float.valueOf("5.5f");
        Double dou = Double.valueOf("6.6");
        Character charac = Character.valueOf('J');
        Boolean bool = Boolean.valueOf("true");
    }
}
需要注意的是在 Boolean.valueOf(String value) 中,当 value 为 true 时,Boolean 值为 true;当 value 不为 true 时,Boolean 值都为 false。

拆箱

1) *Value()

每个包装类都有一个 Value() 方法,是包装类对应的基本数据类型的名称,通过该方法可以将包装类转为基本数据类型,具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        Byte byt = Byte.valueOf("1");
        byte b = byt.byteValue();
        Short shor = Short.valueOf("2");
        short s = shor.shortValue();
        Integer integer = Integer.valueOf("3");
        int i = integer.intValue();
        Long lon = Long.valueOf("4");
        long l = lon.longValue();
        Float flo = Float.valueOf("5.5f");
        float f = flo.floatValue();
        Double dou = Double.valueOf("6.6");
        double d = dou.doubleValue();
        Character charac = Character.valueOf('J');
        char cha = charac.charValue();
        Boolean bool = Boolean.valueOf("true");
        boolean bo = bool.booleanValue();
    }
}

2) parse*(String value)

除 Character 类以外的每一个包装类都有一个静态方法可以将字符串类型转为基本数据类型,具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        byte b = Byte.parseByte("1");
        short s = Short.parseShort("2");
        int i = Integer.parseInt("3");
        long l = Long.parseLong("4");
        float f = Float.parseFloat("5.5f");
        double d = Double.parseDouble("6.6");
        boolean bo = Boolean.parseBoolean("true");
    }
}
需要注意的是,在 Boolean.parseBoolean (String value) 中,当 value 为 true 时,Boolean 值为 true;当 value 不为 true 时,Boolean 值都为 false。

3) 其他方法

每一个包装类都有一个静态方法 toString(type value),可以将基本数据类型转为 String 类型,具体使用参考下面的代码:
public class Test {
    public static void main(String[] args) {
        byte b = 1;
        String bstr = Byte.toString(b);
        short s = 2;
        String sstr = Short.toString(s);
        String i = Integer.toString(3);
        long l = Long.parseLong("4");
        String lstr = Long.toString(l);
        float f = Float.parseFloat("5.5f");
        String fstr = Float.toString(f);
        double d = Double.parseDouble("6.6");
        String dstr = Double.toString(d);
        boolean bo = Boolean.parseBoolean("true");
        String bostr = Boolean.toString(bo);
        String chastr = Character.toString('J');
    }
}

推荐阅读