最近(我想是因为我把代码转换成了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上看到的每个线程(例如这个(都建议使用compareTo
,但> ZERO
可以工作,并且是安卓工作室推荐的?
tl;dr:
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年开始就这个问题进行的讨论。