当我们在比较Java中Interger类型的数据时,有时候会发现两个明明相同的值,最后比较的结果为false,这是为什么呢?这就要了解一下我们常说的“128陷阱”
在Java中,Interger是数据类型int的封装类,Java设计者是这么认为的:
下面我们来看看代码:每次都要开辟新空间会占用大量的资源,因此他们规定在-128~127(因为Java设计者认为大家对数的使用大多在100以内)之间的Integer类型的变量,直接指向常量池中的缓存地址,不会new开辟出新的空间。
public static void main(String[] args) {
Integer a1=127;
Integer a2=127;
Integer b1=128;
Integer b2=128;
System.out.println(a1==a2);
System.out.println(b1==b2);
}
运行结果为:
*如果想要正确比较的话,一定要拆箱比较,即在变量后加intValue()方法
*如果想要正确比较的话,一定要拆箱比较,即在变量后加intValue()方法
*如果想要正确比较的话,一定要拆箱比较,即在变量后加intValue()方法
重要的事情说三遍。
public static void main(String[] args) {
Integer a1=127;
Integer a2=127;
Integer b1=128;
Integer b2=128;
System.out.println(a1.intValue()==a2.intValue());
System.out.println(b1.intValue()==b2.intValue());
}