1.装箱:值类型转换为引用类型(基本数据类型转换为包装器类型)
自动装箱:
Integer total=99;
装箱的时候自动调用的是Integer的valueOf(int)方法
2.拆箱:引用类型转换为值类型(包装器类型转换为基本数据类型)
自动拆箱:
int totalprim=total;
拆箱的时候自动调用的是Integer的intValue方法
总结:装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能
总结实现过程:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的(xxx代表对应的基本数据类型)
总结:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的
Double、Float的valueOf方法的实现是类似的
Integer i=new Integer(xxx); 不会触发自动装箱的过程
Integer i=xxx; 会触发自动装箱的
注意:
当“==”运算符的两个操作数都是包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(则会触发自动拆箱的过程)。对于包装器类型,equals方法并不会进行类型转换
值类型转到引用类型…要先创建一个引用对象,才能把栈中的数据拷贝到托管堆中…
引用类型转到值类型…不销毁引用对象,直到对象生命周期结束才由GC回收…
https://www.cnblogs.com/erlongxizhu-03/p/12983442.html