包装类
我们知道,基本数据类型有八种,每种类型都有自己的一些特点,由于我们使用这些基本数据类型非常多,所以把他们各自的特点封装成方法来使用,是很有必要的,这些方法被包装到每个数据类型对应的类,以方便调用这些方法,这些类叫包装类(wrapper class),每个基本数据类型对应的包装类如下
包装类相应的继承结构如下:
★包装类和基本数据类型的转换(装箱和拆箱)
下面以Integer和Int为例
JDK5之前(不包括JDK5),需要程序员自己手动装箱和拆箱,代码如下
//手动装箱,基本数据类型变包装类,两个方式 int a = 1; Integer integer = new Integer(a); Integer integer1 = Integer.valueOf(a); //手动拆箱,包装类变基本数据类型 int b = integer.intValue();//把a的值返回,赋值给b
JDK5以及JDK5之后,就不再需要程序员手动装箱和拆箱了,我们只需要像下面这样做
//自动装箱 int a = 1; Integer integer = a;//通过调试会看到其实底层还是调用了Integer的valueOf方法 //自动拆箱 int b = integer;////通过调试会看到其实底层还是调用了Integer的intValue方法
我们虽然形式看上去是写了错误的类型转换语法,但通过调试可以知道,其实还是调用了valueOf和intValue方法,编译器是做了优化的。
注意:
①如果将基本数据类型和包装类进行==,那么是判断基本数据类型的值是否相等
Integer integer = 128; int a = 128; System.out.println(a == integer);
//可以看到,即使包装类对象的值是指向一个对象也没事,因为是和基本数据类型比较,所以只比数值 运行结果 true
包装类和String的转换
//包装类---->String Integer a = 1; //方式1,这个方式是把字符串"a的值"存到一个新对象,然后地址给str,a本身的值不变 String str = a + " "; //方式2 str = a.toString(); //方式3 str = String.valueOf(a); //String---->包装类 str = "123"; //方式1 a = new Integer(str); //方式2 a = Integer.parseInt(str); //方式3 a = Integer.valueOf(str);