package main; /** * @author zhaozihui * @date 2019/6/24 */ public class LongTest { public static void main(String[] args) { Long longVal =2L; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;-->自動裝箱 Integer i1 = 1;//Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;-->自動裝箱 Integer i2 =1;// Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;-->自動裝箱 System.out.println(longVal.equals(i1+i2));//false //爲何會出現false呢? /** * i1+i2--> // Method java/lang/Integer.intValue:()I --->先 拆箱操做,進行相加運算 * Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;--->而後將 相加的結果從新裝箱成爲Integer對象 * * Long.equals:(Ljava/lang/Object;)--->最終的比較是Long和Integer進行的比較, * 可是equals的源碼: * public boolean equals(Object obj) { * if (obj instanceof Long) { * return value == ((Long)obj).longValue(); * } * return false; * } * */ Object o = new Object(); System.out.println(o instanceof Long);//false // 因此最終longVal.equals(i1+i2) false的緣由不是值的問題,而是類型不匹配直接返回了false } }
反編譯查看具體的運行;java