Au coeur du JDK : performance des conversions

Dans l'article précédent, qui portait sur la conversion des nombres, je vous ai affirmé que la conversion d'un nombre en chaîne était plus performante en utilisant Integer.toString() que la concaténation du nombre avec une chaîne vide (""+foo).

Comme je n'ai vu aucun commentaire de type "O RLY ?" à la suite de l'article, j'imagine que vous m'avez cru sur parole. C'est bien :) Mais ça va toujours mieux en le démontrant.
J'ai donc monté un petit benchmark pour comparer les deux techniques, en usant des précautions habituelles (nettoyage de la mémoire, optimisations de la JVM déjouées, code warming...).

Le code source complet est disponible en annexe, et tous les résultats présentés ci-dessous ont été obtenus sur un Intel E6300, 3Go ram sous Windows XP 32b et Java 6.0.24.

Lire la suite...

Au coeur du JDK : conversion des nombres

Aujourd'hui, je vous propose une petite révision sur la conversion entre les différentes représentations des nombres.

En Java, il est possible de représenter un nombre sous 3 formes :

  • en utilisant le type primitif adéquat (byte, short, int, long, float, double)
  • en utilisant la classe wrapper correspondante (Byte, Short, Integer, Long, Float, Double)
  • sous forme de chaîne de caractères, provenant le plus souvent d'une saisie utilisateur

Il existe des méthodes optimisées pour opérer des conversion entre ces trois formats. Il est important de les connaître, pour des raisons de lisibilité et de performance.

Lire la suite...