Maison > Java > javaDidacticiel > Comparaison d'entiers Java : quand devez-vous utiliser == vs.equals() ?

Comparaison d'entiers Java : quand devez-vous utiliser == vs.equals() ?

DDD
Libérer: 2024-12-21 06:41:10
original
343 Les gens l'ont consulté

Java Integer Comparison: When Should You Use == vs. equals()?

Égalité entière en Java : démêler le dilemme == vs. égal

L'introduction par Java de l'autoboxing dans la version 1.5 a permis un échange pratique des primitives des types comme int et leurs classes wrapper correspondantes telles que Integer. Cependant, une observation récente a soulevé des questions sur la validité de l'utilisation de == pour la comparaison de valeurs entières.

Considérez le code suivant :

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null & cdiCt != cdsCt)
    mismatch = true;
Copier après la connexion

Étonnamment, ce code définissait parfois une inadéquation à vrai même lorsque les valeurs de cdiCt et cdsCt étaient égales. L'utilisation d'un point d'arrêt dans Eclipse a révélé que les deux valeurs entières étaient égales à 137, mais que l'expression conditionnelle était évaluée à false.

La modification de la condition pour utiliser equals() à la place :

if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))
Copier après la connexion

a résolu le problème problème. Cela soulève la question : n'est-il toujours pas conseillé d'utiliser == pour comparer deux valeurs entières ?

La réponse réside dans la mise en cache des valeurs entières par la machine virtuelle Java (JVM). Pour améliorer les performances, la JVM met en cache les valeurs entières comprises entre -128 et 127. Cela signifie que lorsque vous comparez deux valeurs entières dans cette plage à l'aide de ==, elles ne seront égales que si elles font référence à la même instance mise en cache.

Cependant, si les valeurs se situent en dehors de cette plage ou ne sont pas automatiquement encadrées, elles seront traitées comme des objets distincts. Cela peut conduire à un comportement inattendu, comme le démontre l'exemple fourni.

Par conséquent, il n'est généralement pas recommandé de s'appuyer sur == pour comparer des valeurs entières, en particulier lorsqu'elles peuvent dépasser la plage mise en cache ou si la précision est critique. . Au lieu de cela, utiliser equals() est l'approche la plus sûre pour garantir des comparaisons d'égalité fiables.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal