2016-04-05 24 views
0

Fragen zum Design beiseite, was macht moderne JVMs schneller?Was ist schneller: instanceof oder isInstance?

foo instanceof Bar 

oder

Bar.class.isInstance(foo) 

Warum?

+2

# 1. Es ist in die Sprache eingebaut. Du wirst nicht besser werden. –

+8

Es kommt fast nie darauf an, was schneller ist. – biziclop

+0

@LouisWasserman Ich versuche nicht, es besser zu machen, ich bin nur neugierig, welche Operation schneller ist. – artspb

Antwort

6

Class.isInstance verwenden ist JVM intrinsische. Es wird in genau der gleichen Reihenfolge kompiliert wie instanceof (der Beweis von HotSpot Quellcode: 1, 2). Das heißt, sie sind beide in Bezug auf die Leistung gleich.

1

foo instanceof Bar sollte schneller sein.

Sie können Bar.class.isInstance(foo) verwenden, wenn es zur Kompilierzeit nicht klar ist, welche Klasse Sie haben.

ist folgendes zu beachten:

void test(Object o1, Object o2) { 
    o1.getClass().isInstance(o2); 
} 

In diesem exsample die JVM zur Laufzeit entscheidet, welche Klasse die Methode aufruft. Mit instanceof ist dies nicht möglich.

Also, wenn Sie die Klasse zum Zeitpunkt der Kompilierung wissen sollten Sie instanceof