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()
метод on equals()
метод. Что делает inflate()
do на самом деле?
3 ответов
ответ JavaDoc equals()
метод:
в отличие от
compareTo
этот метод рассматривает дваBigDecimal
объекты равны, только если они равны по значению и масштабу (таким образом, 2.0 не равен 2.00 при сравнении этим методом).
другими словами: equals()
проверяет, является ли BigDecimal
объекты ровно то же самое в аспект. compareTo()
"только" сравнивает их числовые значение.
Я вижу, что BigDecimal имеет метод inflate () на методе equals (). Что на самом деле делает inflate ()?
по сути, 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());