今天参加360代码卫士的一个培训,期间提到Java中对Integer值进行比较有个坑,特此记录一下。
java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
对于Double没有缓冲区。
public class Test {
public static void main(String[] args) {
Integer a1 = Integer.valueOf(60);
Integer b1 = 60;
System.out.println("1:="+(a1 == b1));
Integer a2 = 60;
Integer b2 = 60;
System.out.println("2:="+(a2 == b2));
Integer a3 = new Integer(70);
Integer b3 = 70;
System.out.println("3:="+(a3 == b3));
Integer a4 = 129;
Integer b4 = 129;
System.out.println("4:="+(a4 == b4));
}
}
答案
1:=true
2:=true
3:=false a3是new出来的,不是从缓冲区取的,而b3是缓冲区取的,所以不相等
4:=false