La fonction de la classe dite wrapper est de convertir le type de données d'origine en un type de données de référence. L'article suivant vous présente principalement les solutions aux problèmes rencontrés lors de la comparaison des classes wrapper Java. Des exemples détaillés sont donnés dans le. article. Les amis qui en ont besoin peuvent se référer au code. Jetons un coup d'œil ensemble.
Avant-propos
Cet article présente principalement des solutions à certains problèmes rencontrés lors de la comparaison des classes d'empaquetage Java et les partage pour référence future. à titre de référence. Je n'en dirai pas plus ci-dessous. Jetons un coup d'œil à l'introduction détaillée.
Exemple 1 :
Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e= 321; Integer f= 321; Long g = 3L; System.out.println(c == d); //1 System.out.println(e == f); //2 System.out.println(c == (a+b)); //3 System.out.println(c.equals(a+b));//4 System.out.println(g == (a+b)); //5 System.out.println(g.equals(a+b)); //6
Résultat de sortie
true false true true true false
1. La comparaison des classes d'emballage ne sera pas automatiquement décompressée, mais il y aura un cache dans Integer pour stocker les nombres de -128 à 127, donc les valeurs d'adresse de c et d sont les mêmes.
2. Comparaison des valeurs d'adresse, le cache
n'est pas utilisé 3. Lorsque '==', le déballage automatique se produit sur le côté droit, donc la valeur int est en fait in Compare
4. Lorsque a+b est décompressé dans int, transmettez la méthode égale de Integer pour le packaging automatique. Dans la méthode égale se trouve la comparaison des valeurs.
5. Il sera décompressé en types de données de base et comparé
6. Les égaux de la classe d'emballage détermineront le type si le type dans Long.equals(Object object)
. n'est pas cohérent, il renverra false.
Exemple 2 :
Long a = 1L; Integer b = 1; System.out.println(a.equals(1)); //7 System.out.println(a.equals(1L)); System.out.println(a.equals(b));
Sortie
false true false
En regardant le code source de la classe packaging, vous constaterez que lors de la comparaison, elle déterminera d'abord si les types sont les mêmes.
7. Lorsque a.equals(1)
, int 1 est emballé dans Integer, qui est naturellement un type différent de Long.
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }
Résumé :
Lors de l'utilisation du déballage/emballage automatique, la comparaison entre les classes d'empaquetage ne se décompresse pas automatiquement, il s'agit d'une comparaison d'adresses et il existe un cache qui affectera les résultats.
Lors de la comparaison en utilisant la méthode égale de la classe packaging, puisque la classe packaging ne convertit pas automatiquement le type, lorsque les types sont différents, même si les valeurs sont les mêmes, false sera est revenu. Par conséquent, lorsque vous comparez des valeurs avec des classes wrapper, n'utilisez pas '=='. Lorsque vous utilisez la méthode égale, faites attention au même type ou utilisez directement le type de données de base pour la comparaison.
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!