使用 `equals` 来比较不同单位的长度是不是很糟糕?

Is it bad to use `equals` for length comparison for different units?

另外一个问题,我的代码有这么一个equals方法:

public class Length {

    private final double value;
    private final Unit unit;

    public Length(double value, Unit unit) {
        this.value = value;
        this.unit = unit;
    }

    @Override
    public boolean equals(Object obj) {
        Length length = (Length) obj;
        return this.unit.toMM(this.value) == length.unit.toMM(length.value);
    }
}

我想比较两个Length,如果它们可以转换为相同长度值的相同单位,则它们彼此相等

@weston 在this answer 下给了我很好的解释,为什么我不应该在这里使用equals,但我还是不太清楚。

本质上,他是说10mm1cm不应该相等。这是值得商榷的,由你决定。

作为参考,您可以采用类似于 BigDecimal 的方法:

new BigDecimal("1.0").equals(new BigDecimal("1.00"))    //false
new BigDecimal("1.0").compareTo(new BigDecimal("1.00")) //0

另一个例子是java.time.Period:

Note that this means that a period of "15 Months" is not equal to a period of "1 Year and 3 Months".

或者您也可以认为 10 毫米和 1 厘米相等。以 java.time.Duration:

为例

The comparison is based on the total length of the durations.

最后,重要的是清楚地记录正在做的事情。