Java 效率;“预铸”;vs每次都是铸造

Java 效率;“预铸”;vs每次都是铸造,java,performance,casting,Java,Performance,Casting,有时,您需要基于instanceof进行分支,然后对具体类型执行一些操作 if (obj instanceof IonObject) { Ion.assertRegistered((IonObject) obj); writeMark(((IonObject) obj).getIonMark()); ((IonObject) obj).save(this); return; } 在这种情况下,生成所需类型的局部变量会使代码更高效,还是仅仅是视觉上的改进 i

有时,您需要基于
instanceof
进行分支,然后对具体类型执行一些操作

if (obj instanceof IonObject) { 
    Ion.assertRegistered((IonObject) obj);

    writeMark(((IonObject) obj).getIonMark());

    ((IonObject) obj).save(this);
    return;
}
在这种情况下,生成所需类型的局部变量会使代码更高效,还是仅仅是视觉上的改进

if (obj instanceof IonObject) {
    // cache the casted value
    IonObject iobj = (IonObject) obj;

    Ion.assertRegistered(iobj);

    writeMark(iobj.getIonMark());

    iobj.save(this);
    return;
}

铸造成本很低,因为它必须检查类型是否合适(否则实际上不会改变任何东西)

但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次


如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。

铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西)

但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次


如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。

铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西)

但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次


如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。

铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西)

但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次



如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。

它简化了代码的可读性和可维护性,仅此而已。因此,在运行时强制转换不需要花费任何成本?您是否运行了探查器来查看?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且执行冗余强制转换。