Quelques observations intéressantes pour l'opérateur égal à 0 et 0,0
new Double(0.0).equals(0)
renvoie false, tandis que new Double(0.0).equals(0.0)
renvoie true.
BigDecimal.ZERO.equals(BigDecimal.valueOf(0.0))
renvoie false, tandis que BigDecimal.ZERO.equals(BigDecimal.valueOf(0))
renvoie true.
On dirait que la comparaison de chaînes est en cours dans les deux cas. Quelqu'un pourrait-il jeter un peu de lumière là-dessus.
Merci.
BigDecimal 'equals' compare la valeur et l'échelle. Si vous souhaitez uniquement comparer des valeurs (0 == 0,0), vous devez utiliser compareTo:
BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0.0)) == 0 //true
BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0)) == 0 //true
Voir le javadoc .
Quant à la comparaison Double, comme expliqué par d'autres réponses, vous comparez un Double avec un Integer in new Double(0.0).equals(0)
, qui renvoie false
car les objets ont des types différents. Pour référence, le code de la méthode equals dans JDK 7 est:
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
Dans votre cas, (obj instanceof Double)
c'est faux.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots