在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()
的实现,现在使用它可能更安全。&