Я обнаружил, что instanceof в основном быстрее (около 60-85% времени). Однако этот процент падает, когда на телефоне присутствует фоновая активность (например, ГХ, касание, кнопки, встряхивание и т. Д.), Но экземпляр остается быстрее более 50% времени. Когда количество циклов сделано очень большим (то есть> 1000000), instanceof почти всегда быстрее.
Порядок, в котором представлены два цикла while (то есть сначала цикл instanceof, а затем цикл проверки поля) влияет на результаты, но instanceof остается самым быстрым.
AbstractParticle circleParticle = new CircleParticle();
int cycles = 100000
long now1 = System.currentTimeMillis();
int i = 0;
while(i<cycles) {
if(circleParticle instanceof CircleParticle) {
i++;
}
}
long timetaken1 = (System.currentTimeMillis()-now1);
long now2 = System.currentTimeMillis();
int j = 0;
while(j<cycles) {
if(circleParticle.type == AbstractParticle.TYPE_CIRCLE) {
j++;
}
}
long timetaken2 = (System.currentTimeMillis()-now2);
if(timetaken1 < timetaken2) {
type1won++;
}
else if(timetaken2 < timetaken1){
type2won++;
}
Log.d("instanceof test","type 1 favoured : "+((float)type1won/(type1won+type2won)));