可以在java中将java.lang.Class对象与==进行比较吗?

Adr*_*ith 6 java

可能重复:
Java是否保证Object.getClass()== Object.getClass()?

如果我有一个类如

Class<? extends MyObject> aClass = ...;
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

if (aClass == MySubObject.class) { ... }
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做

if (aClass.equals(MySubObject.class)) { ... }
Run Code Online (Sandbox Code Playgroud)

此外,进一步知道答案,我很想知道一个参考,即这是什么定义.

==如果可能,我更喜欢使用,因为我发现它更具可读性和更快.(显然它不是那么可读,或者更快,但是,如果有更简单的解决方案,为什么还要使用更复杂的解决方案.)

Pet*_*rey 7

你可以使用,==但你什么也得不到,因为这正是Class.equals()它的作用.

类没有定义equals方法,所以它继承自Object.您可以阅读源代码以查看此内容.

equals尽可能使用,因此我不需要考虑它.当我在阅读代码(包括我的代码)时,我仍然不需要问自己是否==equals本课程相同或不同.

  • 是的,你获得了一些东西:`==`是无效的. (5认同)
  • @yankee是的,在这种情况下你可以写.`MySubObject.class.equals(ACLASS)` (5认同)

Joh*_*lla 5

您可以比较班==,这是同样的事情equals的情况下Class,但你的例子表明,你想知道一个类是否有一个"是"的另一种关系.如果他们是同一个班级,那么两个班级只是平等的Vehicle.class != Car.class.

如果你想知道是否Car是a Vehicle,请使用Class#isAssignableFrom.