有时你需要根据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;
}
答案 0 :(得分:3)
Casting的成本很低,因为它必须检查类型是否合适(否则它实际上并没有改变任何东西)
但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码时以一种方式完成。
如果代码运行不足以进行JIT(很可能),代码会稍微慢一些,但并不重要,因为它的调用不够。即JITed与非JITed之间的性能差异远更大。