184 votes

Réflexion de tableau Java : isArray vs instanceof

Existe-t-il une différence de préférence ou de comportement entre l’utilisation :

et

?

206voto

erickson Points 127945

En général, l'utilisation de l' instanceof de l'opérateur de tester si un objet est un tableau.

Au niveau de la JVM, l' instanceof opérateur se traduit par un spécifique "instanceof" byte code, ce qui est hautement optimisé dans la plupart des JVM implémentations.

L'approche réflexive (getClass().isArray()) est compilé en deux "invokevirtual" instructions. Le plus générique optimisations appliquées par la JVM pour ces derniers peuvent ne pas être aussi rapide que la main-à l'écoute des optimisations inhérente à la "instanceof" de l'enseignement.

Il y a deux cas particuliers: null références et des références à des tableaux primitifs.

Une référence null entraînera instanceof résultat false, tandis que l' isArray jette un NullPointerException.

Appliqué à une primitive de tableau, l' instanceof résultats false, mais l' isArray retours true.

33voto

Burkhard Points 6734

Dans ce dernier cas, si obj a la valeur null vous n’obtiendrez une NullPointerException mais un faux.

8voto

Si est de type dites, alors cela aura un tableau mais ne pas être une instance de . Alors que voulez-vous faire avec . Si vous souhaitez effectuer un cast, aller avec . Si vous souhaitez utiliser la réflexion, utilisez `` .

4voto

``est considérablement plus lente sur Sun Java JRE 5 ou 6 que sur IBM.

Bien que l’utilisation de `` est plus rapide sur la JVM de Sun.

4voto

dturanski Points 209

Je suis récemment tombé sur un problème de mise à niveau une application Groovy du JDK 5 à JDK 6. À l’aide de `` a échoué dans JDK6 :

Changer de `` corrigé cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X