龙空技术网

SoEasy——你必须懂得——Java自动装箱与拆箱

IT码将 198

前言:

现在各位老铁们对“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拆箱装箱