基本类型所占用的字节
- 1byte = 8bit
- byte 1个字节
- short、char 2个字节
- int、float 4个字节
- long、double 8个字节
- boolean 1个字节
Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
以Integer为例,其valueOf(int i)的源代码为:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
在Integer里面IntegerCache.low是固定的-128,IntegerCache.high默认是127,但是也可以通过-XX:AutoBoxCacheMax=<size>来配置,而Short、Byte、Character、Long的缓存大小都是固定在-128~127的。
Double、Float的valueOf方法也是类似的。
以Double 为例,其valueOf(double d)的源代码为:
public static Double valueOf(double d) {
return new Double(d);
}
Double的valueOf方法每次返回的都是新的对象。
Boolean的valueOf方法比较特殊。
/**
* The {@code Boolean} object corresponding to the primitive
* value {@code true}.
*/
public static final Boolean TRUE = new Boolean(true);
/**
* The {@code Boolean} object corresponding to the primitive
* value {@code false}.
*/
public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
Boolean因为只有true和false两种情况,所以在加载的时候就会创建TRUE和FALSE两个对象。自动装箱的时候则返回这两个对象的其中一个。