39 votes

Opérateur égal pour les zéros (BigDecimal / Double) en Java

Quelques observations intéressantes w.r.t égale opérateur sur 0 et 0.0

  1. new Double(0.0).equals(0) renvoie faux, tandis que new Double(0.0).equals(0.0) renvoie vrai.

  2. BigDecimal.ZERO.equals(BigDecimal.valueOf(0.0)) renvoie faux, tandis que BigDecimal.ZERO.equals(BigDecimal.valueOf(0)) renvoie vrai.

On dirait que la comparaison des chaînes est faite dans les deux cas. Quelqu'un pourrait-il nous éclairer là-dessus ?

- Merci. Merci.

1voto

Chandra Sekhar Points 6512
new Double(0.0).equals(0); //false

comme l'argument que vous avez passé est entier. et la fonction equels() de la classe Double vérifie si l'argument est une instance od Double ou non en utilisant l'instance de l'opérateur.

La méthode de Double est égale à().

if (!(argument instanceof Double))
  return false;

L'argument que vous avez passé est integer, ce qui n'est pas une instance de Double, donc il retourne false.

1voto

Adam Points 5429

nouveau Double(0.0).equals(0) est en fait encadré comme ceci :

new Double(0.0).equals(Integer.valueOf(0))

Double.equals(...) ne retournera jamais true à moins d'avoir reçu une autre instance Double.

0voto

TheOutsider Points 1
new Double(0.0).equals(0)

Cette ligne compare une valeur double de 0 (ce qui n'est pas exactement zéro) avec un entier de 0.

BigDecimal.ZERO.equals(BigDecimal.valueOf(0.0))

BigDecimal va comparer la longueur de l'échelle dans le fonctionnement égal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X