“Integer是int的包装类,int的默认值是0,而Integer的默认值是null(咱们常常在代码中使用的Integer.valueOf() 和xx.intValue()就是自动装箱和拆箱的过程 ),web
须要注意的是Integer里面默认的缓存数字是-128-127,缓存
Integer
与Integer
相互比较,数据在-128
-127
范围内,就会从缓存中拿去数据,比较就相等;若是不在这个范围,就会直接新建立一个Integer对象,使用== 判断的是两个内存的应用地址,因此天然不相等。spa
Intege
r和int
类型相比,在jdk1.5,会自动拆箱,而后比较栈内存中的数据code
int数据类型,都是在栈内存中存储,若是这个数字在栈内存中存在就会直接指向这个内存地址,若是不存在,就会从新开辟内存空间,因此int和int类型的比较,相同的值不会存在内存不等的状况orm
八个基本数据类型不能看做对象(这点很特殊),存放在栈中。栈内操做速度快,建立销毁很容易对象
会自动拆箱,变成int与int对比内存
上面提到Integer里面会有缓存数字ci
在-128~127的范围内,==会相等,获取的cache的地址it
不在上述范围内,会去new一个对象对比,直接new对象的话,确定不等于io
int a = 200; Integer b = 200; System.out.println(a == b);//会自动拆箱 Integer c = 100; Integer d = 100; System.out.println(c == d);//在Integer缓存范围内,对比的是值 c = 200; d = 200; System.out.println(c == d);//超出Integer缓存范围,对比的对象的内存地址
输出结果:
true true false