2012-01-17 72 views
6

可能重複:
Does Java guarantee that Object.getClass() == Object.getClass()?可以將Java中的java.lang.Class對象與==相比較嗎?

如果我有一個類如

Class<? extends MyObject> aClass = ...; 

可我然後執行:

if (aClass == MySubObject.class) { ... } 

或做我必須做的

if (aClass.equals(MySubObject.class)) { ... } 

此外,進一步知道答案,我很想知道這是定義一個基準,即。

如果可能,我更喜歡使用==,因爲我覺得它更易讀,更快。 (顯然這不是那麼多更易讀,或那麼多更快,不過,爲什麼如果一個簡單的解決方案,可以用一個更復雜的解決方案。)

+1

http://stackoverflow.com/questions/3738919/does-java-guarantee-that-object-getclass-object-getclass – 2012-01-17 14:46:03

+0

另一個http://stackoverflow.com/questions/928531/does-java-have -an-is-kind-class-test-method – 2012-01-17 14:47:17

+0

http://stackoverflow.com/questions/5997801/java-comparing-classes-with-or-equals-is-there-a-difference – 2012-01-17 14:47:18

回答

7

您可以使用==但你一無所獲,因爲這正是Class.equals()做什麼。

類沒有定義equals方法,所以它從Object繼承。你可以閱讀源代碼來看看這個。

我儘可能使用equals,因爲我不需要考慮它。當我閱讀代碼時(包括我的代碼),我仍然不需要問自己==equals相同或者不是這個類。

+5

是的,你獲得一些東西:'=='是無效的。 – yankee 2013-09-09 15:06:25

+5

@yankee真的,在這種情況下,你可以寫。 'MySubObject.class.equals(ACLASS)' – 2013-09-09 15:09:43

5

您可以==比較班,這是同樣的事情equalsClass的情況下,但你的例子表明,你想知道一個類是否有一個「是」的另一種關係。如果兩個班級屬於同一班級,兩個班級只有相同,並且顯然是Vehicle.class != Car.class

如果你想知道一個Car是否爲一個Vehicle,使用Class#isAssignableFrom