我们可以对==
变量而不是Class
执行equals
并期望获得相同的结果吗?
例如:
Class clazz = xyz;
案例A:
if(clazz == Date.class) {
// do something
}
案例B:
if(Date.class.equals(clazz)) {
// do something
}
案例A和案例B的功能是否相同?
答案 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);
}