我们可以==对Class变量执行而不是equals期望相同的结果吗?
例如:
Class clazz = xyz;
案例A:
if(clazz == Date.class) {
// do something
}
情况B:
if(Date.class.equals(clazz)) {
// do something
}
案例A和案例B在功能上是否相同?
我们可以==对Class变量执行而不是equals期望相同的结果吗?
例如:
Class clazz = xyz;
案例A:
if(clazz == Date.class) {
// do something
}
情况B:
if(Date.class.equals(clazz)) {
// do something
}
案例A和案例B在功能上是否相同?
Answers:
类是最终的,因此其equals()不能被覆盖。它的equals()方法是从Object继承的,该Object读取
public boolean equals(Object obj) {
return (this == obj);
}
所以是的,对于类或任何不重写的类型,它们是相同的 equals(Object)
为了回答您的第二个问题,每个ClassLoader只能加载一个类一次,并且对于给定的完全限定名称,它将始终为您提供相同的Class。
是。
看一下Class类的描述,并注意它是equals从继承的Object,方法读取如下:
“ Object类的equals方法在对象上实现了最有区别的对等关系;也就是说,对于x和y的任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true(x = = y的值为true)。”
是的,因为equals(...)用于class的代码如下:
public boolean equals(Object obj) {
return (this == obj);
}