java整形 128陷阱
在利用integer对整形数据进行比较时,两个128是不相同的,-128是相同的。看下代码的运行结果。
package MM;
public class XianJing {
public static void main(String[] args) {
Integer a=128;
Integer b=128;
Integer c=127;
Integer d=127;
Integer e=-128;
Integer f=-128;
System.out.println(a==b);
System.out.println(c==d);
System.out.println(e==f);
}
}
首先我们要明确==比较的东西
1:当比较的是基本类型的时候(int,double,char)等,比较的是两个值。
2:当比较的是封装的对象类型时候(Integer,Double,String)等,比较的是两个对象的地址。
回到上面:当Integer的范围在-128到127时,JVM会有一层缓存操作(当然这个缓存的范围可以修改JVM的的参数就行配置)
会把两个Integer的两个对象指向缓存中的值(即我们常说的拆箱操作)。这时候比较地址就相同了。
而超过127的Integer的值会在堆里new一个对象。所以不相等。