为什么要有包装类(或封装类)

为了使基本数据类型的变量具有类的特征,引入包装类。

基本数据类型与对应的包装类:

image.png

包装类(Wrapper)的使用

  • 基本数据类型包装成包装类的实例 —-装箱
    • 通过包装类的构造器实现:

int i = 500;
Integer t = new Integer(i);

  • 还可以通过字符串参数构造包装类对象:

Float f = new Float(“4.56”);
Long l = new Long(“asdf”); //NumberFormatException

  • 自动装箱
  • 获得包装类对象中包装的基本类型变量 —-拆箱
    • 调用包装类的.xxxValue()方法:
      • boolean b = bObj.booleanValue();
    • 自动拆箱
  • JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配。

  • 字符串转换成基本数据类型

    • 通过包装类的构造器实现:

int i = new Integer(“12”);

  • 通过包装类的parseXxx(String s)静态方法:

Float f = Float.parseFloat(“12.1”);

  • 基本数据类型转换成字符串
    • 调用字符串重载的valueOf()方法:

String fstr = String.valueOf(2.34f);

  • 更直接的方式:

String intStr = 5 + “”;//调用对应包装类的toString方法;

总结:基本类型、包装类与String类间的转换

image.png

例题:
public void test3() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false

//Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率

Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true

Integer x = 128;//相当于new了一个Integer对象
Integer y = 128;//相当于new了一个Integer对象
System.out.println(x == y);//false
}