Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang
包。
基本数据类型 | 包装类 | 基本数据类型 | 包装类 |
---|---|---|---|
byte | Byte | short | Short |
int | Integer | long | Long |
float | Float | double | Double |
boolean | Boolean | char | Character |
其中,Byte
、Short
、Integer
、Long
、Float
、Double
的父类都是java.lang.Number
int val = 10;
// 装箱
Integer integerValue = Integer.valueOf(10);
// 拆箱
int intValue = integerValue.intValue();
jdk5.0新加入特性,引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行装箱和拆箱
int val = 10;
// 自动装箱
Integer integerValue = val;
// 自动拆箱
int intValue = integerValue;
在java中,除了Double
和Float
之外,剩下的包装类都有缓存,也就是说,例如Integer
在装箱时,如果数据的范围是-128 ~ 127
,那么在内存中使用的是同一个对象
// 自动装箱使用缓存
Integer a = 125;
Integer b = 125;
System.out.println(a == b); // true
// 手动装箱使用缓存
Integer c = Integer.valueOf(125);
Integer d = Integer.valueOf(125);
System.out.println(c == d); // true
// new对象,不使用缓存
Integer e = new Integer(125);
Integer f = new Integer(125);
System.out.println(e == f); // false
Boolean
:true
和false
Byte
:-128 ~ 127
Character
:0 ~ 127
Short
:-128 ~ 127
Integer
:-128 ~ 127
Long
:-128 ~ 127