在任何人说什么之前,我只是出于好奇而问这个;我不打算根据这个答案进行任何过早的优化。
我的问题是关于使用反射和投射的速度。标准说法是“反思很慢”。我的问题是到底哪一部分很慢,为什么?特别是在比较某物是否是另一个实例的父项时。
我非常有信心将一个对象的类与另一个 Class 对象进行比较几乎与任何比较一样快,大概只是对已经存储在对象状态中的单例对象进行直接比较;但是如果一个班级是另一个班级的父母呢?
我通常认为instanceof
与常规课堂检查一样快,但今天我想了想,似乎必须在“幕后”进行一些反思instanceof
才能发挥作用。上网查了一下,发现有几个地方有人说instanceof
慢;大概是由于比较对象的父对象需要反射?
这就引出了下一个问题,只是铸造怎么样。如果我将某些东西作为对象投射,我不会得到一个ClassCastException
. 但是,如果将对象强制转换为自身的父级,则不会发生这种情况。本质instanceof
上,当我在运行时进行演员表时,我正在做一个电话或类似的逻辑,不是吗?我以前从未听过任何人暗示投射物体可能会很慢。诚然,并非所有强制转换都是针对所提供对象的父级的,但很多强制转换都是针对父类的。然而,从来没有人暗示这可能会很慢。
那是什么。真的instanceof
没有那么慢吗?两者都instanceof
和投射到父类有点慢吗?还是有什么原因可以比instanceof
通话更快地完成演员阵容?