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