我知道自动取消装箱应该小心,因为正在取消装箱的引用可以为空。为什么自动装箱也被标记为警告?我在这里遗漏了一些陷阱吗?
3 回答
我打算禁用这个 Eclipse 警告,但下面的文章让我考虑不这样做。我仍然不完全确定,但在我看来,这些可能是避免自动装箱的好理由。
https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/
如果您预计不会出现性能问题(在微优化方面),您可以安全地禁用此警告。这只是一个指示,以防您不知道这里发生了自动装箱。在您有 I/O 开销(由于 DB 事务或磁盘访问)的业务逻辑代码中,自动装箱几乎不会成为性能问题。
自动装箱可以帮助开发人员创建与集合的“删除”方法相关的错误,尽管这可能是一个非常模糊的错误。
当我使用随机数生成器选择要从 ArrayList 中删除的项目的索引时,我遇到了这个错误。生成器返回了一个长原语,我不小心尝试将其用作 List.remove(int index) 的参数。编译器将 long 转换为 Long 并在 List.remove(Object o) 中使用它,这给出了完全不同的行为。幸运的是,断言语句很快就发现了错误。
根据this discussion of this issue with "remove",其他人遇到了类似的问题,他们的int意外地表现得像一个整数,尽管我不明白这是怎么发生的。 为什么 Java 集合不删除通用方法? (见 ScArcher2 的评论)