Au cours d’un projet, je suis tombé récemment sur le bout de code suivant:

XmlNode xmlNode = itemBodyChildren.get(index);
if (xmlNode != null && xmlNode.getClass().getName() == referredClass.getName())
	return xmlNode;
else
	return null;

Ici il s’agit de vérifier si deux classes sont identiques en analysant leurs noms. Cette opération peut être réalisée de manière beaucoup plus simple: en effet, lorsqu’une classe est chargée pour la première fois, sa référence est conservée par le ClassLoader afin de pouvoir être réutilisée plus rapidement par la suite.

En conséquence, le programme suivant affichera toujours true:

Class a = Class.forName("Test");
Class b = Class.forName("Test");
System.out.println(a == b);

La code original aurait donc pu être écrit de la manière suivante:

XmlNode xmlNode = itemBodyChildren.get(index);
if (xmlNode != null && xmlNode.getClass() == referredClass)
	return xmlNode;
else
	return null;

Une dernière remarque pour finir: sans la persistance en mémoire des classes chargées par le ClassLoader, le code que j’ai exposé plus haut n’aurait pas été valide puisque son auteur a utilisé sans précaution la syntaxe == pour réaliser sa comparaison.