从最近开始(我认为是因为我将代码转换为 kotlin 但不确定),Android Studio 在我编写时向我显示警告
if (myValue.compareTo(BigDecimal.ZERO) > 0)
消息说“调用可替换为二进制运算符”并将我的代码替换为if (myValue > BigDecimal.ZERO)
我注意到我也使用if (myValue.compareTo(BigDecimal.ZERO) == 0
但是这次我没有收到任何警告,如果我尝试更换它,它就不起作用if (myValue == BigDecimal.ZERO) // DOES NOT WORK
为什么> ZERO
工作但不是== ZERO
?为什么我在 stackoverflow 上看到的每个线程(例如 this )都使用 compareTo
推荐但是 > ZERO
工作并被 Android Studio 推荐?
最佳答案
tl;博士:
val1 > val2
-> val1.compareTo(val2) > 0
val1 == val2
-> val1.equals(val2)
BigDecimal.equals(...)
不能按您期望的方式工作。 这是因为 Kotlin 替换了二元运算符
>
, >=
, <
, 和 <=
调用.compareTo
, 所以 val1 > val2
与 val1.compareTo(val2) > 0
完全相同.但是,问题在于
val1 == val2
替换为对 .equals
的调用, 和 BigDecimal.equals
没有按照您认为的方式行事。检查是否相等的“正确”方法是您已经拥有的,即 val1.compareTo(val2) == 0
您可以阅读 Kotlin 贡献者从 2016 年开始对此问题的讨论 over here .
关于android - BigDecimal比较的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63339605/