Java中对Integer值进行比较时需要注意的地方

【声明】本文为AdamsLee原创,转载请注明出自围炉网并保留本文有效链接:Java中对Integer值进行比较时需要注意的地方, 转载请保留本声明!

今天参加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

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。