我尝试以下一种方式比较整数(对于我的情况,这很好):
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
不是我所知道的最佳实践,那么将会比较参考文献。我应该使用什么代码?
答案 0 :(得分:5)
由于您的-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吮吸它。
答案 1 :(得分:-1)
compareMayNull(Integer a, Integer b)
应该做的不仅仅是返回void ...
也许一个int就可以了,所以你可以做到
(a == null ? -1 : a.compareTo(b)