本文共 936 字,大约阅读时间需要 3 分钟。
自动装箱及自动拆箱篇:
今天小白和大家们谈谈什么是自动装箱及自动拆箱,那么什么是自动装箱和拆箱了?
其实就是包装类(wrapper)提供的一种机制自动装箱(autoboxing)自动拆箱(unboxing)该功能是j2se.5.0提供的,里面有基本数据类型所对应
的对象类型(共有8种包装类),如:
byte——Byte
short——Short
int ——Integer
long——Long
float——Float
double——Double
char——Character
boolean——Boolean
那么基本数据类型和包装类有什么区别了?
int a =10;//基本数据类型是没有什么方法可用的
Integer b = 10;//包装类是有方法可以用的
那么什么是自动装箱了?
如:
Integer b = 10;//就是自动装箱,其实是这样的 Integer a = new Integer(10);
//因为编译会自动帮我们做这样的语法编译
那么什么是自动拆箱了?
Integer a = 10;//装箱
int b = a;//拆箱 实际是 int b = a.intValue();
运算时候的自动拆箱:
Integer a = 10;
System.out.println(a++);
说到这我来和大家谈谈当初我陷进的一道题目。
题目是这样的:
Integer a = 1000,b=1000;
Integer c=100,d=100;
System.out.println(a==b);
System.out.println(c==d);
我第一感告诉我输出 true true,但是答案却是 false true 我当时就慌了,这种坑题对咱们小鸟伤害过万·····
为什么会出现这个答案?
咱们来看看Integer类的源码就清楚了
对于是-128~127的数据Integer.valueOf(int i )会返回的是缓存的Integer对象而不是新建一个对象所以在上面那题中c==b是true
而a 和 b 已经超出大小,Integer.valueOf(int i )方法会返回一个新建的对象所以a 和 b 不是指向同一个对象。
din