课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java有八种基本类型,每种基本类型都有一个对应的包装类。
包装类是什么呢?它是一个类,内部有一个实例变量,保存对应的基本类型的值,这个类一般还有一些静态方法、静态变量和实例方法,以方便对数据进行操作。
Java中,基本类型和对应的包装类如下表所示:
基本类型包装类
boolean
Boolean
byte
Byte
short
Short
int
Integer
longLong
floatFloat
doubleDouble
charCharacter
包装类也都很好记,除了Integer和Character外,其他类名称与基本类型基本一样,只是首字母大写。
包装类有什么用呢?Java中很多代码(比如后续文章介绍的集合类)只能操作对象,为了能操作基本类型,需要使用其对应的包装类,另外,包装类提供了很多有用的方法,可以方便对数据的操作。
包装类的基本使用是比较简单的,但我们不仅会介绍其基本用法,还会介绍一些平时用的相对较少的功能,同时剖析其实现代码,内容比较多,我们会分三节来介绍,本节主要介绍各个包装类的基本用法及其共同点,后两节我们会进一步介绍高级功能,并剖析实现代码。
让我们逐步来介绍。
基本类型和包装类
我们先来看各个基本类型和其包装类是如何转换的,我们直接看代码:
Boolean
boolean b1 = false;
Boolean bObj = Boolean.valueOf(b1);
boolean b2 = bObj.booleanValue();
Byte
byte b1 = 123;
Byte byteObj = Byte.valueOf(b1);
byte b2 = byteObj.byteValue();
Short
short s1 = 12345;
Short sObj = Short.valueOf(s1);
short s2 = sObj.shortValue();
Integer
int i1 = 12345;
Integer iObj = Integer.valueOf(i1);
int i2 = iObj.intValue();
Long
long l1 = 12345;
Long lObj = Long.valueOf(l1);
long l2 = lObj.longValue();
Float
float f1 = 123.45f;
Float fObj = Float.valueOf(f1);
float f2 = fObj.floatValue();
Double
double d1 = 123.45;
Double dObj = Double.valueOf(d1);
double d2 = dObj.doubleValue();
Character
char c1 = 'A';
Character cObj = Character.valueOf(c1);
char c2 = cObj.charValue();
这些代码结构是类似的,每种包装类都有一个静态方法valueOf(),接受基本类型,返回引用类型,也都有一个实例方法xxxValue()返回对应的基本类型。
将基本类型转换为包装类的过程,一般称为"装箱",而将包装类型转换为基本类型的过程,则称为"拆箱"。装箱/拆箱写起来比较啰嗦,Java 1.5以后引入了自动装箱和拆箱技术,可以直接将基本类型赋值给引用类型,反之亦可,如下代码所示:
Integer a = 100;
int b = a;
自动装箱/拆箱是Java编译器提供的能力,背后,它会替换为调用对应的valueOf()/xxxValue(),比如说,上面的代码会被Java编译器替换为:
Integer a = Integer.valueOf(100);
int b = a.intValue();
每种包装类也都有构造方法,可以通过new创建,比如说:
Integer a = new Integer(100);
Boolean b = new Boolean(true);
Double d = new Double(12.345);
Character c = new Character('马');
那到底应该用静态的valueOf方法,还是使用new呢?一般建议使用valueOf。new每次都会创建一个新对象,而除了Float和Double外的其他包装类,都会缓存包装类对象,减少需要创建对象的次数,节省空间,提升性能,后续我们会分析其具体代码。