我们可以在Class
变量上代替equals
做一个==
并且期望得到相同的结果吗?Java等于一个类。与.equals相同
例如:
Class clazz = xyz;
方案A:
if(clazz == Date.class) {
// do something
}
案例B:
if(Date.class.equals(clazz)) {
// do something
}
是方案A和方案B在功能上一样吗?
我们可以在Class
变量上代替equals
做一个==
并且期望得到相同的结果吗?Java等于一个类。与.equals相同
例如:
Class clazz = xyz;
方案A:
if(clazz == Date.class) {
// do something
}
案例B:
if(Date.class.equals(clazz)) {
// do something
}
是方案A和方案B在功能上一样吗?
类是final的,所以它的equals()不能被覆盖。它的equals()方法是从对象读取
public boolean equals(Object obj) {
return (this == obj);
}
所以,是的,他们是一类,或任何类型的同样的事情不覆盖equals(Object)
要回答你的第二个问题,每个继承ClassLoader只能加载一次类,并且始终会为给定的完全限定名称提供相同的Class。
是的。
看看的Class class description并注意它继承equals
从Object
,对于其方法如下:
“的等于Object类的方法实现对象上差别可能性最大的相等关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x == y的值为true)时,此方法返回true。“
是,由于equals(...)
类的代码如下:
public boolean equals(Object obj) {
return (this == obj);
}
可能的复制-http://stackoverflow.com/questions/971954/difference-between-equals-and – mre
@mre,以及我的问题是关于Class类型的实例。类加载器是否保证为给定数据类型返回相同类的实例? – Ramesh
基于一些快速实验,它看起来像是。不过,我不知道它是否受到保护。 –