Comparer deux primitives long de variables en java
Le titre est assez explicite. Je me déplace à partir de C# Java. J'ai un objet et une méthode de lecture qui renvoie l'ID de la. Je veux comparer les id des deux objets de même type et de vérifier si les valeurs de leurs papiers d'identité sont égaux.
essayé:
obj.getId() == obj1.getId();
Long id1 = obj.getId();
Long id2 = obj1.getId();
assertTrue(id1.equals(id2))
assertTrue(id1== id2)
En fait, cette question est source de confusion car il ne s'agit pas de comparer, mais sur le test de l'égalité. Voir docs.oracle.com/javase/7/docs/api/java/lang/...
vous n'êtes pas en train de comparer deux primitives désire Vous êtes en train de comparer deux en boîte de Long.
vous n'êtes pas en train de comparer deux primitives désire Vous êtes en train de comparer deux en boîte de Long.
OriginalL'auteur Dragan | 2012-03-13
Vous devez vous connecter pour publier un commentaire.
En java:
==
opérateur vous indique si les deux opérandes sont de la même objet (instance)..equals()
méthode surLong
vous indique si elles sont de valeur égale.Mais vous ne devriez pas le faire. La manière correcte de le faire, c'est ceci:
Avec
assertEquals()
, si l'assertion échoue, le message d'erreur vous dira quelles sont les deux valeurs ont été, par exemple,expected 2, but was 5
etcOriginalL'auteur Bohemian
Essayez de la manière suivante:
OriginalL'auteur bsimic
Ils ne doivent pas être égal avec ==. Utilisation:
ou
Dans les deux cas, j'ai laissé de côté null-vérifie parce que je me doute que tu avais oublier, si elles sont nécessaires ici 😉
Alors, pourquoi est Long n'est pas toujours == un autre avec la même valeur? La réponse est facile. Ils sont différents des objets! Selon comment Long ont été récupérés, ils pourraient être la même, à cause de interne la mise en cache. Voir Long.valueOf.
OriginalL'auteur spidey
En plus de tous les commentaires concernant le droit de comparaison, le typage fort peut vous aider à résoudre votre problème.
Ne getID() renvoient à quelque chose de type Long (c'est un type de classe) ou de type long (c'est un type primitif)? Le problème est que si la méthode renvoie une valeur primitive, puis de les comparer avec le '==' et 'equals()' à la fois travailler, parce que Java jette automatiquement primitives wrapper objets lorsque vous en avez besoin.
Mais dans l'autre sens, si getID() renvoie une valeur de type Long, la comparaison avec "= = " est susceptible d'échouer, parce que vérifie si vous avez le même objet, pas si les objets ont la même valeur.
OriginalL'auteur Jochen
en java,
utilisation
==
de comparer les primitives et lesx.equals(y)
pour comparer des objets.Je ne suis pas sûr de ce que votre question est-il ressemble à vous essayé les deux, et n'ont pas de travail?
Note, vous utilisez
Long
au lieu delong
, si vous souhaitez utiliser.equals()
(
long
est un primitif,Long
est un objet)OriginalL'auteur edthethird
Vous devez être conscient de la différence entre
Long
etlong
-long
est le type primitif,Long
est le wrapper type. (Un peu comme une boîte à valeur dans C#, mais fortement typé.) Quel est le type de retour degetId()
?Simplement:
doit être très bien si vous êtes en train de faire ce test. Sinon, vous pouvez utiliser:
si ils sont certainement pas null, ou utilisez Goyave:
pour gérer la nullité. (Vous pouvez écrire
Objets.l'égalité
vous-même, bien sûr, mais vous devriez certainement obtenir de Goyave de toute façon, de sorte que vous pourriez aussi bien l'utiliser...)Il est intéressant de noter que certains objets wrappers sont réutilisés - ainsi, par exemple:
Ne pas trop forte d'une assertion. Il peut, il n'est pas garanti.
OriginalL'auteur Jon Skeet
Pour comparer deux primitives de l'utilisation de longue durée Longue.comparer(long x, long y). Cette méthode a été ajoutée dans java 1.7. Ci-dessous est la méthode de la mise en œuvre:
Exemple:
OriginalL'auteur user6437803