这两个块之间会有性能差异吗?
public void doSomething(Supertype input) { Subtype foo = (Subtype)input; foo.methodA(); foo.methodB(); }
与
public void doSomething(Supertype input) { ((Subtype)input).methodA(); ((Subtype)input).methodB(); }
两者之间还有其他考虑或建议吗?
好吧,在第二种情况下,编译后的代码可能包含两次强制转换-因此 ,从理论上讲, 它两次执行相同的工作。但是,智能JIT很可能会得出您对相同的值执行相同的强制转换,因此可以缓存结果。但它 是 不得不做的工作至少一次- 毕竟,它需要做出决定是否允许投成功,或抛出异常。
与以往一样,如果您关心性能,则应该测试和分析代码-但是我个人还是会使用第一种形式,只是因为它对我而言更具可读性。