package com.com.test;
/**
* Created by ***** 2018/6/29 9:18
* java中Integer类型对于-128-127之间的数是缓冲区取的,
* 所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
*/
public class IntegerTest {
public static void main(String[] args) {
Integer a1 = Integer.valueOf(60); //danielinbiti
Integer b1 = 60;
System.out.println("1:="+(a1 == b1)); //true
Integer a2 = 60;
Integer b2 = 60;
System.out.println("2:="+(a2 == b2)); //true
Integer a3 = new Integer(60);
Integer b3 = 60; // 装箱过程也就是Integer b3=Integer.valueOf(60)
System.out.println("3:="+(a3 == b3)); //false
// System.out.println("3:="+(a3.equals(b3))); //true
Integer a4 = 129;//大于127时,在堆中新建
Integer b4 = 129;
System.out.println("4:="+(a4 == b4)); //false
// System.out.println("4:="+(a4.equals(b4))); //true
}
}
代码如上所示,运行结果在注释后。
原因:java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
Integer b3=60,这是一个装箱过程也就是Integer b3=Integer.valueOf(60)
解决办法:使用 equals 代替 “==“,即是前者可能在性能上稍逊于后者,但是用后者的话存在bug的可能性。