我尝试以另一种方式比较整数(对于我的情况,这很好):
public void compareMayNull(Integer a, Integer b) {
if ((a == null ? -1 : a.intValue()) == b.intValue())
System.out.println("true");
}
IntelliJ IDEA给我警告
a.intValue()
和b.intValue()
上“不必要的拆箱”,并建议我将代码简化为:public void compareMayNull(Integer a, Integer b) {
if ((a == null ? -1 : a) == b)
System.out.println("true");
}
但是我有点困惑,因为如果
a != null
不是我所知的最佳实践,则将对引用进行比较。我应该使用什么代码? 最佳答案
因为您具有-1
类型的int
文字,所以a
将自动拆箱(如果且仅当a == null
为false
时,否则不对表达式进行求值)a == null ? -1 : a;
然后,由于此表达式的类型为int
,因此b
也会自动取消装箱。
因此,您可以编写if ((a == null ? -1 : a) == b)
,这很安全,因为Java会自动将a
和b
都拆箱。因此,通过调用intValue()
进行的显式拆箱是多余的,并且IDE会警告您。为避免疑问,在对表达式a
求值时,a == null
是而不是自动取消装箱。
我个人认为这是Java最有害的部分之一。我会认真考虑以您最初拥有它的方式编写它,并告诉您的IDE吸收它。
关于java - 比较两个整数“不必要的拆箱”警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40481925/