当比较对象的类时,应该使用.equals()还是==?

6
在Java中,当您测试对象的类是否相等时,您会使用.equals()还是==
例如,在下面的代码中,是这样吗:
if(object.getClass() == MyClass.class)

或者

if(object.getClass().equals(MyClass.class))

3
可能是[Java == vs equals() confusion] (https://dev59.com/yWsz5IYBdhLWcg3w_NED)的重复问题。 - Sleiman Jneidi
1
这是那个的一个特定版本。在那个问题中没有回应,参考如何比较类。 - Tim Mcneal
1
@SleimanJneidi - 请仔细阅读,Tim在他的问题中询问“类”的比较,而不是对象(实例),因此他的问题与您的重复候选问题有所不同。 - MWiesner
3个回答

2
你也可以使用instanceof进行这种类型的比较。 Class实现没有覆盖equals,因此使用==进行比较是正确的,即它将检查运行时类。例如,以下代码将显示为true:
public static void main(String[] args) {
    
    Object object = "";
    
    if (object.getClass() == String.class) {
        System.out.println("true");
    }
}

比较对象的一般规则是使用“equals”,但是如果要比较类而不想使用“instanceof”,我认为正确的方法是使用“==”。

4
只有当instanceof是一个final类时才相同。 - shmosel

1
我个人倾向于在类上使用 == ,因为我认为它稍微更有效率。但是你必须注意,这只有在对象的引用相同而不仅仅是内容(如使用 equals )时才返回true。

例如,使用 == 比较两个 Class 实例,如果这两个实例是由不同的ClassLoaders加载的,则返回false。

为了保险起见,你应该使用 equals


3
对于Class实例,"=="与".equals"的作用相同,因此使用".equals"是没有意义的。 - Paul Boddington

-1

嗯,我建议你阅读J.Bloch的书籍Effective Java
通常的规则是,除非你想要显式比较给定实例的指针,否则你应该始终倾向于使用一个类的.equals()方法。也就是说,你想要比较类所代表的内容,比如你的示例中的实例的类,或者例如字符串的内容,而不是String对象的指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接