BigDecimal равно() по сравнению с compareTo()
Рассмотрим простой тестовый класс:
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()
на самом деле?
Ответы
Ответ 1
Ответ находится в JavaDoc метода equals()
:
В отличие от compareTo
, этот метод рассматривает два объекта BigDecimal
равными, только если они равны по значению и масштабу (таким образом, 2.0 не равен 2,00 при сравнении этим методом).
Другими словами: equals()
проверяет, являются ли объекты BigDecimal
точно одинаковыми в каждом аспекте. compareTo()
"only" сравнивает их числовое значение.
Ответ 2
Я вижу, что BigDecimal имеет метод inflate() для метода equals(). Что действительно надувает()?
В принципе, inflate()
при необходимости вызывает BigInteger.valueOf(intCompact)
, то есть создает немасштабированное значение, которое хранится как BigInteger
из long intCompact
. Если вам не понадобится BigInteger
, а значение без масштабирования вставляется в long
BigDecimal
, похоже, попытается сэкономить место как можно дольше.
Ответ 3
Вы также можете сравнить с двойным значением
BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1");
System.out.println(a.doubleValue()==b.doubleValue());