今天,幫人看代碼時,發現這個問題,回顧起來,記錄下來。 先來看一個代碼片斷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