2017-04-25 2 views
-2

Introduction: J'ai une méthode dans Android pour faire de longues comparaisons. Fondamentalement, je compare les dates (timestamps/epochs). L'une de ces comparaisons vérifie si les dates sont égales "if (a2 == a1 & & b2 == b1)".Java Long Comparaison

Problème: Le problème est que même si ces nombres sont égaux, le "si" ne fonctionne pas. J'attache également une capture d'écran de l'écran de débogage avec les valeurs qui sont comparées dans un exemple.

Question: Savez-vous pourquoi la condition ne fonctionne pas? Je ne peux pas comprendre puisque c'est juste mathématique qui devrait fonctionner. Peut-être qu'il y a un problème de casting que je ne vois pas? Tous les autres cas, le "si" fonctionne.

Méthode:

public ArrayList<Integer> getConflicts(ArrayList<AssetBooking> assetBookings) { 

     Epoch epoch = new Epoch(); 
     ArrayList<Integer> conflicts = new ArrayList<>(); 

     for (AssetBooking aB : assetBookings) { 

      Long a1 = aB.getFromDatetime()/1000; 
      Long b1 = aB.getToDatetime()/1000; 

      Long a2 = epoch.getEpochNoSeconds(fromDatetime); 
      Long b2 = epoch.getEpochNoSeconds(toDatetime); 

      if (a2 == a1 && b2 == b1) { 
       System.out.println("equals"); 
      } 

      if ((a2 < a1 && b2 >= a1) || (a2 == a1) || (a2 > a1 && b2 < b1) || (a2 > a1 && a2 < b1) || (a2 == a1 && b2 == b1)) { 
       conflicts.add(assetBookings.indexOf(aB)); 
      } 

     } 

     return conflicts; 

    } 

Capture: enter image description here

+0

essayer type primitif « long » au lieu de « Long » qui est une classe wrapper. –

Répondre

5

Long est un objet. si vous tapez a1 == a2 vous vérifiez si a1 est a2 - le même objet, pas la même valeur. Si vous voulez le comparer, vous devez écrire a1.equals(a2) - comme dans String.

Si vraiment vous ne avez pas besoin Long, utilisez long - il sera plus facile et peut être plus efiicient

+0

Ça a marché ... Pouvez-vous m'aider à comprendre pourquoi les gens continuent à voter pour ma question? C'est une excellente plate-forme, mais les gens ont voté, j'ai eu soin de l'écrire. Mon autre compte, je ne peux plus poster de questions parce que les gens continuent à faire ça. Aff. Je ne connais pas le point de la plate-forme si les gens ne peuvent pas demander des choses qu'ils ne connaissent pas ... –

+0

Je pense que moins les votes sont parce que la question n'est pas liée à Android, mais à Java, et compariosn et l'égalité des objets et primitives est un sujet de base dans l'apprentissage Java. Vous obtiendrez probablement une réponse plus rapide en cherchant dans Google ou dans n'importe quel livre –

1

essayez ceci:

long a1,a2; 
long b1,b2; 

if (a2.equals(a1) && b2.equals(b1)) { 

}