首页 > 代码库 > 包装类
包装类
在开发过程中,有很多的方法接收的参数都是引用类型的对象,此时就无法将一个基本数据类型的数据传入。这是就需要通过包装类将基本数据类型的值包装为引用类型的对象。下表列出了每种基本数据类型对应的包装类:
基本数据类型 | 对应的包装类 |
byte | Byte |
char | Charactter |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念。其中,装箱是指将基本数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型。
Example01.java
public class Example01 { public static void main(String[] args) { int a = 20; Integer in = new Integer(a); System.out.println(in.toString()); } }
运行结果如下:
上面的例子演示了包装类Integer的装箱过程,在创建Integer对象时,将int类型的变量a作为参数传入,从而转为Integer类型。同时,由于Object类是所有类的父类,因此可以通过调用toString()方法将Integer的值以字符串的形式打印出来。此处的toString()方法也可以省略。
Integer类除了具有Object类的所有方法之外,还有一些特有的方法。
方法声明 | 功能描述 |
static String toBinaryString(int i) | 以二进制无符号整数形式返回一个整数参数的字符串 |
static String toHexString(int i) | 以十六进制无符号整数形式返回一个整数参数的字符串 |
static String toOctalSring(int i) | 以八进制无符号整数形式返回一个整数参数的字符串 |
static Integer valueOf(int i) | 返回一个表示指定的int值的Integer实例 |
static Integer valueOf(String s) | 返回保存指定的String的值的integer对象 |
static int parseInt(String s) | 将字符串参数作为有符号的十进制整数进行解析 |
intValue() | 将Integer类型的值以int类型返回 |
Example02.java
1 public class Example02 { 2 public static void main(String[] args) { 3 Integer num = new Integer(20); 4 int a = 10; 5 int sum = num.intValue() + a; 6 System.out.println("sum=" + sum); 7 } 8 }
运行结果如下:
上面的例子演示了拆箱的过程,Integer对象通过调用intValue()方法,将Integer对象转为int类型,从而可以与int类型的变量a进行加法运算,最终得出运算结果。
上面列表中的parseInt()方法在程序中很常用,它是一个静态方法,用于将一个字符串形式的数值转成int类型。
在使用包装类时,需要注意以下几点:
- 包装类都重写了Object类的toString()方法,以字符串的形式返回被包装的基本数据类型的值。
- 除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错,如下:
1 Integer i = Integer.valueOf("123");//合法 2 Integer i = Integer.valueOf("12a");//不合法
- 除了Character外,包装类都有parseXxx(String s)的静态方法,将字符串转换为对应的基本类型的数据。参数s不能为null,而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行会报错,如下:
1 int i = Integer.parseInt("123");//合法 2 Integer in = Integer.parseInt("12a");//不合法
JDK5.0新特性---自动拆箱和自动装箱
在JDK5.0之前,数学运算表达式中的操作数必须是基本类型的,并且运行结果也是基本类型,包装类和基本类型是不允许进行混合数学运算的,如果想运算,必须要通过拆箱将包装类对象转为基本数据类型的值才行。
包装类