128陷阱出现在java的自动装箱这一块
自动装箱是什么呢
我们先了解一下对象包装器
在java中有时int这种基本类型需要转成对象所有的基本类型都有对应类 如Integer对应基本类型int 通常这些类称为包装器
假如说定义一个整形数组列表不能用ArrayList 这就用到了包装类integer
我们就可以声明一个list列表
ArrayList list = new ArrayList<>()
list.add(3)如果调用这个
那么自动变换成list.add(Interger.valueOf(3))这个变换称为自动装箱(打包)
相反的讲一个integer对象赋给一个int值称为自动拆箱list.get(i).intValue()
我们都知道==运算符也可以应用对象包装器对象只不过检测的对象的是否指向同一个区域因此下面通常时不成立
Integer a = 1000;
Integer b = 1000;
if(a == b) … …
然而java却有可能让他结果时true如果将经常出现的值包装到同一个对象 中这种比较就有可能成立所以我们一般比较时要调用equals方法
然而
Integer a = 100;
Integer b = 100;
if(a == b) … …
他的结果就会输出true
这是因为java规范自动装箱要求boolean byte char <= 127 介于-128~127之间 的short和int被包装到同一个固定的对象中如上面第二个例子
这就是我们所说的128陷阱