在進行對象之間的比較時會須要針對兩個對象的類屬性值進行比較,此時能夠選擇 instanceof 或者 getClass() 進行比較判斷。二者均可以用於比較對象之間的類是否相同,但也存在一些區別。測試
使用 instanceof 時會判斷該對象是否屬於指定類或接口,同時也會判斷是否屬於其繼承類或實現類。若是知足其中一個條件則返回值爲 true,不然爲 false。測試代碼以下:code
public class Test { public static void main(String[] args) { Object a = new SubClassA(); System.out.println("a instanceof SubClassA is: " + (a instanceof SubClassA)); System.out.println("a instanceof SuperClass is: " + (a instanceof SuperClass)); System.out.println("a instanceof SuperInterface is: " + (a instanceof SuperInterface)); System.out.println("a instanceof SubClassB is: " + (a instanceof SubClassB)); } } class SuperClass { } interface SuperInterface { } class SubClassA extends SuperClass implements SuperInterface { } class SubClassB extends SuperClass { }
上述代碼輸入以下:對象
a instanceof SubClassA is: true a instanceof SuperClass is: true a instanceof SuperInterface is: true a instanceof SubClassB is: false
因爲 a 對象爲 SubClassA 類的實例,且繼承了 SuperClass 類,並實現了 SuperInterface 接口,故使用 instanceof 進行判斷的時候結果都爲 true,而與 SubClassB 類進行比較時則爲 false。繼承
使用 getClass() 方法進行判斷時,因爲 getClass() 方法返回值爲當前實例對象的 Class 對象,同時 Class 類並未重寫 equals() 方法,故進行判斷時不管是使用 == 仍是使用 equals() 方法都是同樣的效果(Object類的 equals() 方法也是使用的 == 進行比較),是比較當前的 Class 對象是否相同。測試代碼以下:接口
public static void main(String[] args) { Object a = new SubClassA(); System.out.println("a.getClass() == SubClassA.class is: " + (a.getClass() == SubClassA.class)); System.out.println("a.getClass() == SuperClass.class is: " + (a.getClass() == SuperClass.class)); System.out.println("a.getClass() == SuperInterface.class is: " + (a.getClass() == SuperInterface.class)); System.out.println("a.getClass() == SubClassB.class is: " + (a.getClass() == SubClassB.class)); }
上述代碼輸入以下:get
a.getClass() == SubClassA.class is: true a.getClass() == SuperClass.class is: false a.getClass() == SuperInterface.class is: false a.getClass() == SubClassB.class is: false
因爲 a 對象爲 SubClassA 類的實例,經過 getClass() 方法進行判斷時不會對其父類或其接口類進行關聯,故對應判斷結果都爲 false。class
經過上述比較可知,使用 instanceof 進行類的判斷時,只要左邊的對象是右邊的類的子類或實現類時都可成立。而使用 getClass() 方法進行判斷時,須要嚴格判斷是否爲相同類的對象。方法