Malgré l'introduction du boxing et du unboxing dans Java 5, les développeurs continuent d'utiliser des types primitifs dans leur code. Cela peut sembler contre-intuitif étant donné la commodité supplémentaire qu'offrent les types en boîte, mais l'utilisation de primitives présente plusieurs avantages tangibles.
Considérations sur les performances
Les points forts de "Java efficace" de Joshua Bloch l'impact potentiel sur les performances de l'utilisation de Long au lieu de long dans un calcul simple. Les opérations de boxing et de unboxing impliquent l’allocation et la désallocation d’objets, ce qui peut ralentir l’exécution du code. Comme le démontre l'exemple fourni, l'utilisation de types primitifs peut réduire considérablement le temps d'exécution.
Égalité des valeurs
Un autre avantage des types primitifs est leur notion native d'égalité des valeurs. L'opérateur == compare les valeurs directement, tandis que la méthode .equals() sur les types encadrés nécessite des étapes et une surcharge supplémentaires. Cela peut conduire à un code plus concis et efficace, en particulier dans les scénarios critiques en termes de performances.
Implications sur la mise en cache
En Java, les petites valeurs entières ([-128 ; 127] ) sont mis en cache par la JVM. Cela signifie que exactement le même objet est renvoyé pour ces valeurs, ce qui peut améliorer les performances par rapport à l'utilisation de types encadrés. Cependant, pour les valeurs en dehors de cette plage, de nouveaux objets sont créés, introduisant potentiellement une surcharge d'objet inutile.
Exemple : le puzzle "Biziclop"
Le comportement de .equals( ) pour les entiers encadrés peut prêter à confusion. Considérez le code suivant :
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); // false System.out.println(new Integer(500) == new Integer(500)); // false System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false } }
Pourquoi la ligne (3) renvoie-t-elle vrai et la ligne (4) renvoie-t-elle faux ? La réponse réside dans le mécanisme de mise en cache. Les valeurs 5 et -5 sont mises en cache par la JVM, donc deux instances de new Integer(5) font référence au même objet. Cependant, 500 n'est pas mis en cache, donc deux instances de new Integer(500) sont des objets distincts. Integer.valueOf(), d'autre part, utilise un cache supplémentaire qui inclut tous les entiers, garantissant que pour les valeurs de ce cache (généralement tous les entiers compris dans la plage [-128 ; 127]), le même objet est renvoyé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!