前言:
现在各位老铁们对“java拆箱装箱”都比较关怀,看官们都想要剖析一些“java拆箱装箱”的相关内容。那么小编在网上汇集了一些有关“java拆箱装箱””的相关文章,希望同学们能喜欢,小伙伴们快快来学习一下吧!很简单,下面两句代码就可以看到装箱和拆箱过程
简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
下面我们来看看需要装箱拆箱的类型有哪些:
这个过程是自动执行的,那么我们需要看看它的执行过程:
1 public class Main {2 public static void main(String[] args) {3 //自动装箱4 Integer total = 99;5 6 //自定拆箱7 int totalprim = total;8 }9 }
Integer total = 99;
执行上面那句代码的时候,系统为我们执行了:
Integer total = Integer.valueOf(99);
int totalprim = total;
执行上面那句代码的时候,系统为我们执行了:
int totalprim = total.intValue();
就以Integer为例,来分析一下它的源码:
1、首先来看看Integer.valueOf函数
1 public static Integer valueOf(int i) {2 return i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128];3 }
它会首先判断i的大小:如果i小于-128或者大于等于128,就创建一个Integer对象,否则执行SMALL_VALUES[i + 128]。
首先我们来看看Integer的构造函数:
1 private final int value;2 3 public Integer(int value) {4 this.value = value;5 }6 7 public Integer(String string) throws NumberFormatException {8 this(parseInt(string));9 }
它里面定义了一个value变量,创建一个Integer对象,就会给这个变量初始化。第二个传入的是一个String变量,它会先把它转换成一个int值,然后进行初始化。
下面看看SMALL_VALUES[i + 128]是什么东西:
1 private static final Integer[] SMALL_VALUES = new Integer[256];
它是一个静态的Integer数组对象,也就是说最终valueOf返回的都是一个Integer对象。
所以我们这里可以总结一点:装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能。
2、接着看看intValue函数
1 @Override2 public int intValue() {3 return value;4 }
这个很简单,直接返回value值即可。
标签: #java拆箱装箱