128陷阱是什么?
这是著名的128陷阱。
为什么从128开始,后边结果就不一样了呢?
首先我们要知道,Integer有一个数组cache[ ],它的范围是-128~127,当Integer类型的变量a和b在-128~127时,是直接指向常量池中的缓存地址,a和b指向的都是cache[ ]中的127。但当值超过这个范围时,是用new重新开辟内存空间,新开辟的地址不同,所以c==d的结果是false。
Integer a=127; 这行代码是将整型的127赋给了Integer(引用型)的a。是Java编译器替我们执行了一个方法,这个方法把int封装成了Integer类型,然后赋给了a,这个就是自动装箱。(valueOf()方法)
而自动拆箱就是反过来,把Integer类型的a赋给了整型的e。Java编译器替我们执行了把Integer拆成int的一个方法。(intValue()方法)
看完上面这些,你应该有一定了解了吧?我找来了一个面试题,判断一下:
结果是:true true false
解析:
1、int a 和 Integer b,两者用==比较时,两者不是同一数据类型,b自动拆箱,所以a==b,true。
2、Integer c 和 Integer d 两者是同一数据类型(无拆装箱),并且在-128~127范围内, true。
3、还是c和d,两者都是Integer型(无拆装箱),但是200在-128~127范围以外,需要新开辟内存空间,所以是false。
还没有评论,来说两句吧...