除了instanceof运算符之外还有什么方法可以在java中进行对象类型比较吗?

我记得在一些Java书中读到除了’instanceof’之外的任何运算符,用于比较两个对象之间的类型层次结构。

instanceof是最常用和最常见的。 我无法清楚地记得是否确实存在另一种做法。

就在这里。 不是运算符而是Class类的方法。

这是: isIntance(对象o)

从文档引用:

…此方法是Java语言instanceof运算符的动态等价物

public class Some { public static void main( String [] args ) { if ( Some.class.isInstance( new SubClass() ) ) { System.out.println( "ieap" ); } else { System.out.println( "noup" ); } } } class SubClass extends Some{} 

您也可以使用Class.isInstance进行reflection。

 Class stringClass = Class.forName("java.lang.String"); assert stringClass.isInstance("Some string"); 

显然,如果在编译时知道类的类型,那么instanceof仍然是最好的选择。

instanceof操作是最好的选择,原因有两个:1)它处理子类型,所以如果你有一个子类/子类型的实例,你仍然会得到真实。 2)它处理null,因此null instanceof Class将返回false

如果你接受一个对象的类然后与另一个类进行比较,那么你冒着冒一个空对象的类的风险,你不能直接得到子类型。

如果使用表示类的对象,则可以使用reflection操作,因为instanceof将引用它们自己的类Class,而不是它们所代表的类。

 if ( someClass.isAssignableFrom( obj.getClass() ) ) 

相当于

 if ( obj instanceof Foo ) 

如果在编译时已知要检查的类,则使用isAssignableFrom如果仅在运行时知道,则使用isAssignableFrom