有时需要需要将基本数据类型转换为对象,所以就需要包装器(wrapper)的存在,所有的基本类型对应都有一个包装器类
int——Integer
long——Long
float——Float
double——Double
short——Short
byte——Byte
(注:以上六个类派生于公共的超类Number)
character——Character
void——Void
boolean——Boolean
在Java SE 5.0之后开始出现自动装箱(autoboxing)(boxing这种说法源自C#),如下:
ArrayList<Integer> list = new ArrayList<>();
list.add(3);
将被自动装箱为
list.add(Integer.valueOf(3));
这就是自动装箱(autoboxing)
相反地,当将一个Integer对象赋给一个int值,将会自动拆箱
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
· 自动装箱的规范要求boolean、byte、char≤127,介于-128~127之间的short和int被包装到固定的对象中,例如:
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false
然而
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
· 装箱和拆箱操作是编译器认可的,而不是JVM,编译器会在生成字节码文件的时候插入必要的方法调用
· 包装器类是不可变的,包含在包装器中的内容不会改变
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※