Considérons la classe de test simple:
import Java.math.BigDecimal;
/**
* @author The Elite Gentleman
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal x = new BigDecimal("1");
BigDecimal y = new BigDecimal("1.00");
System.out.println(x.equals(y));
System.out.println(x.compareTo(y) == 0 ? "true": "false");
}
}
Vous pouvez (consciemment) dire que x
est égal à y
(pas de référence d'objet), mais lorsque vous exécutez le programme, le résultat suivant s'affiche:
false
true
Question: Quelle est la différence entre compareTo()
et equals()
dans BigDecimal
que compareTo
puisse déterminer que x
est égal à y
?
PS: Je vois que BigDecimal a une méthode inflate()
sur la méthode equals()
. Que fait réellement inflate()
?
La réponse est dans le JavaDoc de la méthode equals()
:
Contrairement à
compareTo
, cette méthode considère que deux objetsBigDecimal
ne sont égaux que s'ils sont égaux en valeur et en échelle (donc 2.0 n'est pas égal à 2.00 comparé avec cette méthode) .
En d'autres termes: equals()
vérifie si les objets BigDecimal
sont exactement identiques chaque aspect . compareTo()
"seulement" compare leur valeur numérique.
Je vois que BigDecimal a une méthode inflate () sur la méthode equals (). Que fait réellement gonfler ()?
Fondamentalement, inflate()
appelle BigInteger.valueOf(intCompact)
si nécessaire, c'est-à-dire qu'il crée la valeur non mise à l'échelle stockée sous la forme d'un BigInteger
à partir de long intCompact
. Si vous n'en avez pas besoin, BigInteger
et que la valeur non échelonnée s'inscrit dans un long
BigDecimal
semble essayer de gagner de la place le plus longtemps possible.