Java包装类简介
Java是一种强类型语言,一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用,因此必须为每一个变量声明一种类型。在Java中,一共有8种基本数据类型,其中有四种整型(int,short,long,byte)、两种浮点类型(float,double)、1种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真值(布尔值)的boolean类型。但在实际使用中我们常常需要将int型这样的基本数据类型,转换成对象。例如在使用泛型程序设计时,我们需要指定一个类型参数用来指示元素的类型,但是这个类型参数必须使用引用类型(至于原因会在文章最后指出),即基本类型对应的对象。
`List<Integer> list=new ArrayList<>();`
这时我们就需要将基本数据类型转换为对应的对象包装器,每一个基本类型都有一个与之对应的类,这个类被称为包装器。对应关系如下:
- int : Integer
- long : Long
- float : Float
- double : Double
- short : Short
- byte : Byte
- char : Character
- boolean : Boolean
- void : Void
比如我们可以这样使用。
int a=123;
Integer b=new Integer(123);
从Java SE5开始自动包装功能能自动地将基本类型转换为包装器类型,并且可以反向转换。
Integer a =123;
int b=a;
而在这之前,我们需要对此进行显示的转换,否则编译器就会报错。
Integer a=123;
int b=a.intValue();
至于为什么需要包装类,主要原因有两个:
1. 便于类型转换,防止类型强转时发生异常和错误。
2. 在某些需要传入Object类型的参数时,需要传入基本类型对应的包装类型。
因为Java是一个完全面向对象的语言,但唯一的例外可能就是基本类型了,因为对象是存放在堆中的,但是基本数据类型是创建一个并非是引用的“自动”变量。这个变量直接存储”值”,并置于堆栈中,因此更高效。可见,包装类其实比基本数据类型是更加面向对象的。