Integer i1 = Integer.valueOf(127);
Integer i2 = Integer.valueOf(127);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
System.out.println("--------------------------");
Integer i3 = Integer.valueOf(128);
Integer i4 = Integer.valueOf(128);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
結果:
true
true
--------------------------
false
true
近來在項目中對兩個對象判斷父子關係時,一直是false,但debug時發現明明是true啊,怎麼回事啊?
忽然想起Integer是對象,不能使用==進行判斷,要使用equals進行判斷。
對兩個Integer進行==比較,如果在Byte範圍內,是true(進行了緩存)。超出範圍,就是false。
因爲==基本類型判斷的是數值,在對象判斷時判斷的是內存地址,而Interger也是對象,不能使用==進行判斷,要使用equals方法。
當然也可以這樣
System.out.println(i3.intValue() == i4.intValue());
一直一來都忽視了這個問題,現在才發現,以後一定要注意。
謹此特記!!!