java包装类自动拆装箱(AutoBoxing)及128陷阱详解
注意:java5之前拆装箱是需要手动完成的,java5之后可以自动的完成
1、装箱
装箱:把基本类型转成对象包装类型
- 方式一:Integer i = Integer.valueOf(10)
- 方式二:Integer i = new Integer(10)
2、拆箱
拆箱:把包装类型转换成对应基本类型
-
Integer i = new Integer(10);
int i_v =,i.intValue();
3、自动装箱
//可以不需要调方法,直接赋值给对应的包装类型,会自动的调用
int value=10;
Integer integer_value=value;
4、自动拆箱
//自动的把Integer类型转换为int类型,不需要手动的调用
Integer integer_value=10;
int value=integer_value;
5、128陷阱
方法:Integer里面的valueOf()方法中有一个(Integer数组)cach数组
- 如果在: -128–127 这个空间就会调用元空间里面的数值,返回的是整个cach数组,只要值相同,两个numb1和numb2地址就相等
- 当不在这个空间内,则这个方法会new一个新的空间,此时两个numb1和numb2的方法在堆中,此时两个数的内存地址不相等,如果用==进行比较时,因内存地址不同则输出true
- 如果用equals方法进行比较时,内容相同,则都会返回true
//-128--127之间是true, 所在数据的
//不在这个空间:false
//128陷阱
Integer numb1=127;
Integer numb2=127;
System.out.println(numb1==numb2);
原因:原码
如果:是新创建的空间,则比较的结果为false