小编典典

用Java进行转换是否需要任何运行时成本?

java

这两个块之间会有性能差异吗?

public void doSomething(Supertype input)
{
    Subtype foo = (Subtype)input;
    foo.methodA();
    foo.methodB();
}

public void doSomething(Supertype input)
{
    ((Subtype)input).methodA();
    ((Subtype)input).methodB();
}

两者之间还有其他考虑或建议吗?


阅读 221

收藏
2020-10-12

共1个答案

小编典典

好吧,在第二种情况下,编译后的代码可能包含两次强制转换-因此 ,从理论上讲,
它两次执行相同的工作。但是,智能JIT很可能会得出您对相同的值执行相同的强制转换,因此可以缓存结果。但它 不得不做的工作至少一次-
毕竟,它需要做出决定是否允许投成功,或抛出异常。

与以往一样,如果您关心性能,则应该测试和分析代码-但是我个人还是会使用第一种形式,只是因为它对我而言更具可读性。

2020-10-12