Java的基本数据类型
Java的基本数据类型有8种
整数:byte、short、int、long
浮点数:float、double
布尔:boolean
字符:char
他们对应的装箱类型如下:
除了字符类型的装箱类型是Character以及int的装箱类型是Integer,其余的都是基本类型的首字母大写
为什么需要装箱类型
为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作
自动拆箱与装箱
Integer i =10; //自动装箱
int b= i; //自动拆箱
那么jvm是如何做到的呢?经过反编译class文件后,得到下面的代码
Integer i=Integer.valueOf(10);
int b=i.intValue();
由此可知啊,装箱是通过包装类型的valueOf()
方法来实现的,拆箱是通过包装类型的xxxValue()
方法来实现的
自动拆装箱与缓存
缓存仅仅对整数类型的自动拆装箱生效,即对于byte、int、short、long的自动拆箱装箱
当数值在-128~127
之间,会从缓存中取出对应数值的Byte/Integer/Short/Long对象,若是超过了这个数值,则会创建新的对象
这一点可以从源码中看到,例如:查看Integer的valueOf()方法:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
由此我们也可以展开一下,如是通过自动装箱类型得到的两个对象,且数值在-128~127之内,那么两个对象其实就是一个对象