在java中测试类类型之间的平等性

在java中测试类类型之间的平等性,java,Java,我应该使用=操作符或使用更可靠的方法,如Object.equals(Object) 范例 String.class==obj.getClass()或String.class.equals(obj.getClass()) PS:我只对使用类类型比较感兴趣(不使用instanceof操作符)不,只要JVM中没有不同的类加载器。 java中的每个对象都有一个对应的java.lang.Class对象,并且不管对象的实际实例数有多少,都会将其加载到JVM中一次。这两个版本基本相同,因为java.lang.

我应该使用
=
操作符或使用更可靠的方法,如
Object.equals(Object)

范例

String.class==obj.getClass()
String.class.equals(obj.getClass())


PS:我只对使用类类型比较感兴趣(不使用
instanceof
操作符)

不,只要JVM中没有不同的类加载器。
java中的每个对象都有一个对应的
java.lang.Class
对象,并且不管对象的实际实例数有多少,都会将其加载到JVM中一次。

这两个版本基本相同,因为
java.lang.Class
使用
对象内部的标准实现:

public boolean equals(Object obj) {
    return (this == obj);
}
既然
Class
是final,你就不能忽略它

但是请注意,使用不同的类加载器后,可能会得到两个基本相同但实例不同的类,即
java.lang.String!=如果两者都来自不同的类加载器(该特定示例可能不会发生,它只是一个示例)

最后,如果调用它的实例永远不能为
null
(并且
String.class
不会为null),那么您可能希望使用
equals()
。这样你就强化了在
==
上使用
equals()
的习惯,在极不可能的情况下,
Class
会在某个时候改变
equals()
的实现,现在使用它可能更安全。

&