BigDecimal es igual a () que compare a ()

Considere la clase de prueba 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"); } } 

Puedes decir (conscientemente) que x es igual a y (no referencia de objeto), pero cuando ejecutas el progtwig, el siguiente resultado muestra:

 false true 

Pregunta: ¿Cuál es la diferencia entre compareTo() y equals() en BigDecimal que compareTo puede determinar que x es igual a y ?

PD: veo que BigDecimal tiene un método inflate inflate() método equals() . ¿Qué hace inflate() realidad?

La respuesta está en el método JavaDoc del método equals() :

A diferencia de compareTo , este método considera dos objetos BigDecimal iguales solo si son iguales en valor y escala (por lo tanto, 2.0 no es igual a 2.00 cuando se compara con este método).

En otras palabras: equals() comprueba si los objetos BigDecimal son exactamente iguales en todos los aspectos. compareTo() “solo” compara su valor numérico.

Veo que BigDecimal tiene un método inflate () en el método equals (). ¿Qué hace inflar () en realidad?

Básicamente, inflate() llama a BigInteger.valueOf(intCompact) si es necesario, es decir, crea el valor sin long intCompact almacenado como BigInteger desde long intCompact . Si no necesita ese BigInteger y el valor sin escalar cabe en un BigDecimal long parece tratar de ahorrar espacio el mayor tiempo posible.

También puedes comparar con doble valor

 BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1"); System.out.println(a.doubleValue()==b.doubleValue()); 
    Intereting Posts