Java等于Class。 ==与.equals相同

时间:2011-09-06 15:37:42

标签: java

我们可以对==变量而不是Class执行equals并期望获得相同的结果吗?

例如:

Class clazz = xyz;

案例A:

if(clazz == Date.class) {
// do something
}

案例B:

if(Date.class.equals(clazz)) {
// do something
}

案例A和案例B的功能是否相同?

3 个答案:

答案 0 :(得分:83)

Class是final,所以不能覆盖它的equals()。它的equals()方法继承自Object,它读取

public boolean equals(Object obj) {
    return (this == obj);
}

所以是的,对于一个类,或者任何不覆盖equals(Object)

的类型,它们都是一样的

要回答第二个问题,每个ClassLoader只能加载一次类,并且总是为给定的完全限定名称提供相同的类。

答案 1 :(得分:5)

是。

查看Class class description并注意它从equals继承了Object,该方法为:

“类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法返回true (x == y的值为true)。“

答案 2 :(得分:4)

是的,因为类equals(...)的代码如下:

public boolean equals(Object obj) {
    return (this == obj);
}