我应该使用 ==
运算符还是使用更可靠的方法(如 Object.equals(Object)
例
String.class == obj.getClass()
或String.class.equals(obj.getClass())
PS:我只对使用类类型比较感兴趣(不使用instanceof
运算符(
不,只要 JVM 中没有不同的类加载器。Java 中的每个对象都有一个对应的java.lang.Class
对象,并且无论对象的实际实例数量如何,它都会加载到 JVM 中一次。
两个版本基本相等,因为java.lang.Class
使用Object
内部的标准实现:
public boolean equals(Object obj) {
return (this == obj);
}
既然Class
是最终的,你就不能覆盖它。
但是请注意,一旦您使用不同的类加载器,您可能会得到两个基本相同但不同的实例的类,即 java.lang.String != java.lang.String
如果两者都来自不同的类加载器(该特定示例可能不会发生,这只是一个说明(。
最后,如果您调用它的实例永远不会null
(并且String.class
不会为空(,则您可能仍希望使用 equals()
。这样,您就可以加强使用equals()
而不是==
的习惯,并且在极不可能的情况下,Class
会在某个时候改变其equals()
的实现,现在使用它可能更安全。