Прежде чем кто-нибудь скажет что-нибудь, я спрашиваю об этом только из любопытства; Я не планирую делать преждевременную оптимизацию, основанную на этом ответе.
Мой вопрос о скорости использования рефлексии и литья. Стандартное высказывание - "отражение медленное". Мой вопрос заключается в том, какая именно часть идет медленно, и почему; особенно при сравнении, если что-то является родителем другого экземпляра.
Я довольно уверен, что просто сравнение класса объекта с другим объектом класса примерно так же быстро, как и любое сравнение, по-видимому, просто прямое сравнение одиночных объектов, которые уже хранятся в состоянии Object; но что, если один класс является родителем другого?
Я обычно думаю о instanceof
как о столь же быстром, как обычная проверка класса, но сегодня я подумал об этом, и кажется, что для работы instanceof
должно произойти какое-то отражение "под сценой". Я проверил онлайн и нашел несколько мест, где кто-то сказал, что instanceof
медленный; предположительно из-за рефлексии, необходимой для сравнения родительского объекта?
Это приведет к следующему вопросу, как насчет просто кастинга. Если я что-то бросаю в качестве объекта, я не получаю ClassCastException
. Но это не происходит, если вы бросаете объект самому родителю. По сути, я делаю вызов instanceof
или логику для этого, когда я выполняю показ во время выполнения, не так ли? Я никогда не слышал, чтобы кто-нибудь намекнул, что кастинг объекта может быть медленным раньше. По общему признанию, не все броски относятся к родительскому объекту предоставленного объекта, но множество отливок относится к родительским классам. Но никто никогда не намекал на то, что это может быть медленным.
Итак, что это. Действительно ли instanceof
не так медленно? Являются ли оба instanceof
и кастинг для родительского класса медленным? или есть ли какая-то причина, что бросок может быть выполнен быстрее, чем вызов instanceof
?