Égalité de référence entière vs égalité de valeur
En Java, les primitives comme int et les wrappers d'objet comme Integer ne sont pas interchangeables. La question pose un problème où les objets Integer avec des valeurs int égales sont comparés de manière incorrecte à l'aide de ==, ce qui entraîne de vrais résultats inattendus.
La réponse réside dans la mise en cache des valeurs Integer par la JVM. Pour des raisons de performances, la JVM réutilise les objets pré-alloués dans une plage spécifique (-128 à 127). Lors de la comparaison d'objets Integer à l'aide de ==, la JVM vérifie l'égalité des références et non l'égalité des valeurs. Pour les valeurs situées dans cette plage mise en cache, l'égalité des références implique l'égalité des valeurs.
Cependant, dans l'exemple de code fourni, les valeurs entières sont en dehors de cette plage mise en cache, donc l'égalité des références ne garantit pas l'égalité des valeurs. Au lieu de cela, equals() doit être utilisé pour comparer les valeurs entières pour l'égalité.
Le lien stackoverflow référencé dans la réponse à la question fournit des informations supplémentaires sur les complexités de l'autoboxing et pourquoi le compilateur ne peut pas toujours « le faire fonctionner ».
En résumé, bien qu'il soit pratique d'utiliser == pour les primitives, il est crucial de comprendre les limites de l'égalité des références lorsqu'il s'agit de wrappers d'objets comme Integer. Pour les comparaisons d'égalité de valeurs, equals() doit être utilisé à la place.
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!