que operator mayor con comparar java equals bigdecimal compareto

operator - compare bigdecimal to int java



BigDecimal es igual a() que compare a() (3)

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 programa, 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?


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.


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.


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());