Java包装类、拆箱和装箱详解
Java 是面向对象语言,但八种基本类型并不带对象特性:没有属性、也不能调方法。保留它们是为了符合习惯,并让常规数值运算更简单高效。
引用类型都继承了 Object,转成字符串只要调 toString();基本类型就麻烦得多。为此 Java 给每种基本类型配了一个类,叫做包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。
每个包装类对象封装一个对应的基本类型值,并提供一些有用方法。对象一经创建,所封装的值不可改变(不可变)。基本类型转到包装类叫装箱,反过来叫拆箱。
| 基本类型 | 包装类 | 拆箱方法 |
|---|---|---|
| byte | Byte | byteValue() |
| short | Short | shortValue() |
| int | Integer | intValue() |
| long | Long | longValue() |
| float | Float | floatValue() |
| double | Double | doubleValue() |
| char | Character | charValue() |
| boolean | Boolean | booleanValue() |
一、手动装箱与拆箱
八个包装类用法相近。以 Integer 为例:历史上可用构造方法把 int 装箱,用 intValue() 拆箱。Java 9 起这些构造方法已过时,推荐 Integer.valueOf(m)。
运行结果:n = 500;obj 等价于 obj1?true。比较包装对象的值要用 equals,不要依赖 ==(缓存范围外会是不同对象)。
二、字符串与整数互转
Integer 有静态方法 parseInt(String s, int radix):s 是要转换的字符串,radix 是进制,可省略,默认十进制。字符串必须整段都是合法数字,否则抛异常。
运行结果:只有 123 能转;后面三个都无法转换。整数转字符串用静态 Integer.toString(m),也可以 String.valueOf(m)。
运行结果:s = 500。
三、自动装箱和拆箱
上面都是手动实例化包装类。Java 5 之前必须手动拆装箱;Java 5 起可以自动进行:把 int 赋给 Integer 会装箱,把 Integer 赋给 int 会拆箱。
运行结果同样是 n = 500,以及 equals 为 true。自动拆装箱是日常写法,但包装类型为 null 时拆箱会抛空指针,需要留意。
一句话总结:包装类把八种基本类型变成对象;基本类型进对象叫装箱,出来叫拆箱,Java 5 起可以自动做。
转载请注明来源:Java包装类、拆箱和装箱详解







