在 java 中使用 == 运算符比较 Class<T> 对象是个好主意吗?

Joh*_*ith 1 java reflection

在 .NET 中,在比较 Type 对象时我可以不用 == 。是否可以使用相同的运算符来比较 Java 中的 Class 对象,还是应该始终使用 equals() 方法?

Bri*_*ian 5

Class不会覆盖equals,所以没关系。如果您调用equals类,默认实现将仅进行引用比较。Object这是调用的默认实现Class.equals

public boolean equals(Object obj) {
    return (this == obj);
}
Run Code Online (Sandbox Code Playgroud)

话虽这么说,唯一一次拥有Class同一类的两个实例是当它们共享名称但被加载到代码中的两个不同位置时,此时它们不一定相等。如果您有多个类,则可能会发生这种情况ClassLoader,但这些类不一定相同,因为它们可能具有不同的字节码。如果可以的话,我还建议避免多重ClassLoader场景,因为这会导致类解析不必要的复杂性,并且某些库不支持它。只有在应用程序启动后必须动态加载类的代码才应该执行此操作,例如 JNLP 客户端、基于插件的应用程序等。