2012-01-17 73 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