java中Integer值比較不注意的問題

今天,幫人看代碼時,發現這個問題,回顧起來,記錄下來。 先來看一個代碼片斷java

public static void main(String[] args) {
        Integer a1 = Integer.valueOf(60);  //danielinbiti
	    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(60);  
	    Integer b3 = 60;  
	    System.out.println("3:="+(a3 == b3));  
	    
		Integer a4 = 129;  
	    Integer b4 = 129;  
	    System.out.println("4:="+(a4 == b4));  
	}

        這段代碼的比較結果,若是沒有執行不知道各位心中的答案都是什麼。 要知道這個答案,就涉及到Java緩衝區和堆的問題。 java中Integer類型對於-128-127之間的數是緩衝區取的因此用等號比較是一致的。但對於不在這區間的數字是在堆中new出來的。因此地址空間不同,也就不相等。 Integer b3=60,這是一個裝箱過程也就是Integer b3=Integer.valueOf(60) 因此,之後碰到Integer比較值是否相等須要用intValue() 對於Double沒有緩衝區。spa

答案 1:=true 2:=true 3:=false 4:=falsecode

相關文章
相關標籤/搜索