BigDecimal равно () по сравнению с compareTo ()

Рассмотрим простой тестовый class:

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"); } } 

Вы можете (сознательно) сказать, что x равен y (а не объектной ссылке), но когда вы запускаете программу, следующий результат показывает:

 false true 

Вопрос: В чем разница между compareTo() и equals() в BigDecimal что compareTo может определить, что x равно y ?

PS: Я вижу, что BigDecimal имеет метод inflate() метода equals() . Что inflate() самом деле?

Ответ в JavaDoc метода equals() :

В отличие от compareTo , этот метод считает, что два объекта BigDecimal равны только в том случае, если они равны по значению и масштабу (таким образом, при сравнении этого метода 2.0 не сравнивается с 2.00).

Другими словами: equals() проверяет, являются ли объекты BigDecimal одинаковыми во всех аспектах. compareTo() “only” сравнивает их числовое значение.

Я вижу, что BigDecimal имеет метод inflate () для метода equals (). Что надувает () на самом деле?

В принципе, inflate() вызывает BigInteger.valueOf(intCompact) если это необходимо, т.е. создает немасштабированное значение, которое хранится как BigInteger из long intCompact . Если вам не нужен этот BigInteger и значение unscaled вписывается в long BigDecimal похоже, пытается сэкономить место как можно дольше.

Вы также можете сравнить с двойным значением

 BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1"); System.out.println(a.doubleValue()==b.doubleValue()); 
  • String.Equals () не работает по назначению
  • Разница между пустой и пустой ("") строкой Java
  • Как реализовать метод hashCode и equals
  • Переопределение GetHashCode для изменяемых объектов?
  • Использование '==' вместо .equals для строк Java
  • Почему мы не можем использовать '==' для сравнения двух чисел с плавающей запятой или двойных чисел
  • Какие проблемы следует учитывать при переопределении равных и hashCode в Java?
  • Какова лучшая страtagsя для Equals и GetHashCode?
  • Как следует использовать равенства и hash-код при использовании JPA и Hibernate
  • Любые причины, чтобы предпочесть getClass () над instanceof при генерации .equals ()?
  • Есть ли утилита отражения Java для глубокого сравнения двух объектов?
  • Давайте будем гением компьютера.