Je vois une amélioration de performances en utilisant l'opérateur getClass()
et ==
plutôt que l'opérateur instanceOf
.
Object str = new Integer("2000");
long starttime = System.nanoTime();
if(str instanceof String) {
System.out.println("c'est une chaîne de caractères");
} else {
if (str instanceof Integer) {
System.out.println("c'est un entier");
}
}
System.out.println((System.nanoTime()-starttime));
starttime = System.nanoTime();
if(str.getClass() == String.class) {
System.out.println("c'est une chaîne de caractères avec equals");
} else {
if(str.getClass() == Integer.class) {
System.out.println("c'est un entier");
}
}
System.out.println((System.nanoTime()-starttime));
Est-ce qu'il existe des directives pour savoir quand utiliser getClass()
ou instanceOf
?
Dans un scénario donné : je connais les classes exactes à vérifier, c'est-à-dire String
, Integer
(ce sont des classes finales), etc.
Est-ce que l'utilisation de l'opérateur instanceOf
est une mauvaise pratique ?
4 votes
Cela est expliqué dans: stackoverflow.com/questions/596462/….
5 votes
Votre méthode de chronométrage cause des retards artificiels et produit des résultats temporels incorrects. Inversez l'ordre des vérifications que vous effectuez et vous verrez que la première vérification que vous faites (soit == ou instanceof) sera toujours plus longue. Je suppose que ce sont les println()s. Vous ne devriez jamais inclure ce genre de choses dans votre bloc de chronométrage.
3 votes
Juste un commentaire à part, pour comparer les performances, utilisez plusieurs itérations du cycle (par exemple 10000) afin d'améliorer la précision. Une seule invocation n'est pas une bonne mesure.
0 votes
Quelle est la différence de taille ?