1.
Integer a = 127;Integer b = new Integer(127);System.out.println(a==b);//false
Integer a =127;這裡有一個自動裝箱的過程,本質是調用Integer.valueof(127);
而Integer b = new Integer(127);新建了一個對象。所以不相等。
2.
Integer c = 127;Integer d = Integer.valueOf(127);System.out.println(c==d); //true
答案為true;Integer c =127 就相當於Integer.valueof(127)。
3.
Integer g = 128;Integer h = Integer.valueOf(128);System.out.println(g==h);//false
當我們把127換成128就會為false。原因是使用了緩存機制。[-128,127]這個區間裡會有緩存;否則調用new Integer()。打開valueof的源碼。
對所有的進行一下歸類。
Integer派別:Integer、Short、Byte、Character、Long這幾個類的valueOf方法的實現是類似的。
Double派別:Double、Float的valueOf方法的實現是類似的。每次都返回不同的對象。
4.
Integer e = new Integer(127);Integer f = new Integer(127);System.out.println(e==f);//false
同時新建了對象,不管有沒有緩存都會返回false。
5.
Integer i = 128;int j = new Integer(128);System.out.println(i==j);//true
這裡有一個拆箱過程。實質比較的是i.intvalue()==j。這時和緩存就沒什麼關係了。返回true。j是int類型,i是Integer類型。會將i轉成int比較。若類型相同(都是Integer)則不會轉換。