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

Ram*_*esh 70 java

我们可以==Class变量上做一个而不是equals期望相同的结果吗?

例如:

Class clazz = xyz;
Run Code Online (Sandbox Code Playgroud)

案例A:

if(clazz == Date.class) {
// do something
}
Run Code Online (Sandbox Code Playgroud)

案例B:

if(Date.class.equals(clazz)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*rey 84

类是final,因此不能覆盖equals().它的equals()方法继承自读取的Object

public boolean equals(Object obj) {
    return (this == obj);
}
Run Code Online (Sandbox Code Playgroud)

所以是的,它们对于Class或任何不覆盖的类型都是相同的 equals(Object)

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

  • 两个不同的类装载机是否可能产生不同的类并且它们出现了? (7认同)
  • @voipp你可以从两个不同的类加载器中获得两个"相同"类的实例,但在正常情况下不会出现这种情况 (3认同)
  • 这就是我说的,不是吗?我正在引用@kbolino关于从两个不同的类加载器中获取"相同"类的两个实例的注释. (3认同)
  • @kbolino在OSGI和ESB(如ServiceMix)的世界中,从不同类加载器获得的"相同"类的多个实例更常见的示例. (2认同)

che*_*ken 6

是.

看一下Class类的描述并注意它继承equalsObject该方法的读取:

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