java - 当我们尝试将 Java 装箱基元与 "=="而不是 ".equals"进行比较时,我可以生成警告吗?

标签 java static-analysis primitive autoboxing

NPE 被描述为“值(value)数十亿美元的错误”。我不得不相信紧随其后的第二个可能是将装箱基元与“==”而不是 .equals(...) 进行比较。

当我们的代码库的一部分返回 Long 而不是 long 时,例如:

class Car {
  Long speed;
}

Car carA, carB;
boolean res1 = carA.getSpeed() == carB.getSpeed(); // could fail if the speeds are equal because the wrappers are distinct.

boolean res2 = Objects.equals(carA.getSpeed(), carB.getSpeed()); // compares by value and works

这种事情在 PR 中很容易被忽略。有没有办法生成警告来捕捉这种情况?我们使用声纳、FWIW。

最佳答案

如果您使用 IntelliJ,默认情况下会发出警告

参见https://www.jetbrains.com/help/idea/list-of-java-inspections.html#code-maturity了解更多详情

关于java - 当我们尝试将 Java 装箱基元与 "=="而不是 ".equals"进行比较时,我可以生成警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69290736/

相关文章:

java - 在监听器中使用 ParserRuleContext 遍历 token - ANTLR4

c# - int (Int32) 是否被视为 .NET 中的对象或原语(不是 int?)?

java - 如何使用具有原始 int 键和原始 int 值的 Map?

java - android dalvik验证错误: register1 v1 type 0,想要引用

java - session 过期时重定向到登录页面时出现空指针异常?

java - 缺少 BlackBerry Java CodeCompletion

java - 可扩展 ListView 您可以移动自定义图标(指示器)吗?

debugging - 预期程序崩溃

c# - 使用正则表达式定位多个嵌套的 If 语句

javascript - 为什么闭包编译器偏爱 !0 而不是 true?