BigDecimal равно () и сравнить с () - PullRequest
138 голосов
/ 22 июля 2011

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

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() на самом деле?

Ответы [ 3 ]

193 голосов
/ 22 июля 2011

Ответ находится в JavaDoc метода equals() :

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

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

1 голос
/ 22 июля 2011

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

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

0 голосов
/ 15 сентября 2017

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

BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1");
System.out.println(a.doubleValue()==b.doubleValue());
...