Ben*_*cri 9 android bigdecimal kotlin android-lint android-studio
从最近开始,(我认为是因为我将代码转换为 kotlin,但不确定),Android Studio 在我编写时向我显示警告
if (myValue.compareTo(BigDecimal.ZERO) > 0)
Run Code Online (Sandbox Code Playgroud)
该消息显示“调用可替换为二元运算符”并将我的代码替换为
if (myValue > BigDecimal.ZERO)
Run Code Online (Sandbox Code Playgroud)
我注意到我也使用
if (myValue.compareTo(BigDecimal.ZERO) == 0
Run Code Online (Sandbox Code Playgroud)
但这一次我没有收到任何警告,如果我尝试更换它,它不起作用
if (myValue == BigDecimal.ZERO) // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)
为什么> ZERO有效但无效== ZERO?为什么我在 stackoverflow 上看到的每个线程(例如this)都推荐使用compareTobut > ZEROwork 并且是 Android Studio 推荐的?
Mat*_*ein 10
长话短说:
val1 > val2->val1.compareTo(val2) > 0val1 == 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 年开始就该问题进行的讨论。
| 归档时间: |
|
| 查看次数: |
2940 次 |
| 最近记录: |