预制效率"预制" vs每次投射

时间:2014-04-21 20:04:40

标签: java performance casting

有时你需要根据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;
}

1 个答案:

答案 0 :(得分:3)

Casting的成本很低,因为它必须检查类型是否合适(否则它实际上并没有改变任何东西)

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

如果代码运行不足以进行JIT(很可能),代码会稍微慢一些,但并不重要,因为它的调用不够。即JITed与非JITed之间的性能差异更大。