考虑一下简单的测试类:

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

问题:BigDecimal中的compareTo()equals()之间有什么区别,compareTo可以确定x等于y

PS:我看到BigDecimal有一个inflate()equals()的方法.inflate()的实际用途是什么?

推荐答案

答案在the JavaDoc of the equals() method:

compareTo不同,该方法仅当两个BigDecimal对象的值和比例相等时,才认为它们相等(因此,使用该方法进行比较时,2.0不等于2.00).

换句话说:equals()判断BigDecimal个对象在every个方面是否相同.compareTo()"仅"比较它们的数值.

至于why equals()是这样的,这个问题已经回答了in this SO question.

Java相关问答推荐

Java JAR环境(JRE)是否支持模块?

如何在Javascript中设置文本区域圆角的样式

SQlite for Android无法使用json_group_array/json_object

为什么我要创建一个单独的互斥体/锁对象?

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

R.id.main给我一个红色错误,无法解析MainActivity.java中的符号main

AssertJ Java:多条件断言

Spring Boot Maven包

SonarLint:只能有条件地调用方法(S)

WebSockets和Spring Boot安全性出现错误401

buildDir:File!&#的getter解决方案是什么?39.被抛弃

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

垃圾回收器是否真的删除超出作用域的对象?

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

JPA无手术同品种器械可能吗?

TinyDB问题,无法解析符号';上下文&

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

无泄漏函数的Java DRY

什么是;u〃;平均值;jdku;在java开发工具包中?

如何组合Mono和Flux