[JAVA] Compare Integer avec ==

Histoire

J'ai vu quelque chose de désagréable en me réveillant. https://twitter.com/EclipseJavaIDE/status/1043084678339719168

Set<Short> set = new HashSet<>();
for (short i = 0; i < 10; i++) {
    set.add(i);
    set.remove(i - 1);
}
System.out.println(set.size());

Choisissez votre choix.

  1. Exception avec remove → hors de question 2.0 → Je ne sais pas en premier lieu 3.1 → Réponse incorrecte attendue
  2. 10 → Bonne réponse

La raison en est que i -1 passera du type int au type Integer, donc il ne correspond pas aux éléments de Set détenus par le type Short. .. ..

Confirmation de base

System.out.println(1 == new Integer(1));
System.out.println(1 == Integer.valueOf(1));
System.out.println(new Integer(1) == new Integer(1));
System.out.println(Integer.valueOf(1) == Integer.valueOf(1));
System.out.println(new Integer(1) == Integer.valueOf(1));

Le résultat est le suivant. true true false true false

Vérifiez si vous savez

System.out.println(Integer.valueOf(-129) == Integer.valueOf(-129));
System.out.println(Integer.valueOf(-128) == Integer.valueOf(-128));
System.out.println(Integer.valueOf(127) == Integer.valueOf(127));
System.out.println(Integer.valueOf(128) == Integer.valueOf(128));

Le résultat est le suivant. false true true false

C'est pour l'efficacité. Les seuils 127 et 128 doivent avoir changé dans les propriétés du système.

Confirmation de base également

System.out.println(1 + 1 == new Integer(1) + 1);
System.out.println(new Integer(1 + 1) == new Integer(1) + 1);

Le résultat est le suivant. true true

Le côté droit sera de type int.

Basé sur

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(1);
list.add(128);
list.add(128);
System.out.println(list.get(0) == list.get(1));
System.out.println(list.get(0) == list.get(1) + 0);
System.out.println(list.get(2) == list.get(3));
System.out.println(list.get(2) == list.get(3) + 0);

Le résultat est le suivant. true true false true

C'est plutôt bien que si vous prenez +0, le résultat changera en fonction de la plage de valeurs.

Cela ne fonctionne probablement pas bien parce que je comprends les spécifications et que ce n'est pas +0, mais cela devrait être comme ça. De plus, je ne sais pas ce que c'est, mais j'ai dit que j'avais besoin de +0, et même si je faisais un test de régression, je n'ai pas remarqué que le comportement avait changé quand je l'ai fait dans environ 1, 2 ou 3, et la bombe était posée. ..

Ahaha.

Recommended Posts

Compare Integer avec ==
Si vous osez comparer Integer avec "==" ...
Comment vérifier les nombres entiers avec ruby
Comparez Java 8 en option avec Swift
Mémo entier
Méthode de surcharge avec arguments Int et Integer
[Java] Résumez comment comparer avec la méthode equals