Java常用类---包装类

包装类

包装类简介

Java语言是典型的面向对象编程语言,但是其中的8种基本数据类型并不支持面向对象编程,基本类型数据不具备"对象"的特性,即:没有携带属性以及没有方法可以调用。

为了解决上述问题,java为每种基本类型设计分别设计了对应的类,称为包装类(Wrapper Classes)

基础数据类型类与包装类对应关系,如下图所示。

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

注:每个包装类的对象可以封装一个相应的基本类型数据,并提供了其他一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。所有的包装类都是抽象类Number的子类。

基本类型和对应的包装类可以相互转化:

  • 从基本类型向对应的包装类转换称为装箱

    eg:char包装成为Character类的对象。

  • 从包装类向对应的基本类型转换称为拆箱

    eg:Character类的对象重新简化为char。

手动装箱和拆箱

以int和Integer为例,可以通过Integer类的构造方法(构造器)将int装箱,通过Integer类的intValue方法将Integer拆箱。手动装箱和拆箱如下图所示。

Java常用类---包装类_第1张图片

Integer类中常用方法:

  1. 静态paseInt方法,可以将字符串转化为整数,方法定义如下图所示。

    Java常用类---包装类_第2张图片

    其中,s参数为要转换的字符串,radix为要转化字符串中数的进制,默认进制为十进制。

    方法调用效果,如下图所示。

    Java常用类---包装类_第3张图片

    注:图中radix为要转化字符串中数的进制。即,将一个指定进制为radix的字符串s解析为一个十进制整数。

    补充:有些字符串无法通过此方法转换为整数,如下图所示。

    Java常用类---包装类_第4张图片

    很明显"123abc"等字符串的数字内容并不是十进制的数字类型,故不能转化为整数形式。

  2. 静态toString方法,可以将整数转化为字符串,方法定义如下图所示。

    Java常用类---包装类_第5张图片

    其中,i参数为要转换的整数,radix参数为该整数要转换成radix进制的字符串,默认进制为十进制。

    方法调用效果,如下图所示。

    Java常用类---包装类_第6张图片

    注:图中radix为转化后字符串中数的进制。即,将一个数i转化为一个指定进制数为radix的字符串。

    补充:直接在整数后加空字符串也可将整数转换为字符串形式。如下图所示。

    Java常用类---包装类_第7张图片

自动装箱和拆箱

在Java1.5之后,可进行自动拆箱装箱,即在进行基本数据类型和对应的包装类转换时,系统将自动进行,方便了书写。如下图所示。

Java常用类---包装类_第8张图片

其中,编译器会根据所写语法,决定是否进行拆箱装箱动作,如下式所示。

//装箱
Integer i = 100;
//上式等价于下式的手动装箱
Integer i = new Integer(100);
​
//拆箱
int j = i;//i如前式,已装箱
//上式等价于下式的手动拆箱
int j = i.intValue();

注:自动功能也存在弊端,如下式所示。

Integer i = null;
int j = i;

这段代码在编译期间是合法的,但运行时会有错误。因为在拆箱时,需要调用Integer对象中的intValue方法,但变量i没有任何实例对象,故不能使用intValue方法。所以上述式子运行时会产生NullPointerException错误。如下图所示。

你可能感兴趣的:(java,开发语言)