我被告知不要执行以下代码并检查使用&&
条件以确保resultCode不是以下之一。但我不明白为什么这样做不会奏效。好像应该这样。 HttpStatus返回一个int。 resp.getResultCode()
会返回Long
。
if(!Arrays.asList(HttpStatus.NO_CONTENT.value(), HttpStatus.GONE.value(), HttpStatus.OK.value())
.contains(resp.getResultCode())){
// Do things
}
上面有什么问题? 提前谢谢。
答案 0 :(得分:2)
正如您所说,getResultCode
会返回Long
。 HttpStatus.value()
会返回int
,当您将其java.lang.Integer
放入List
时会自动加到java.lang.Integer
。
java.lang.Long
永远不等于false
,因此您的if语句始终返回long
。
除了@RichardSchwartz提到的效率原因之外 - 我认为并不是在努力工作。
要使它完全有效,你应该:
int
(小写),则应首先将其转换为.contains((int)resp.getResultCode()))
:Long
int
,您应该以这种方式将其转换为.contains(resp.getResultCode().intValue()))
:java.lang.Integer.equals
以下是 public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
的源代码:
{{1}}
答案 1 :(得分:0)
您编写它的方式,JVM必须分配内存来实例化一个Array对象,然后填充三个元素。然后它将不得不评估contains方法,它将遍历Array元素。 Array对象的内存(最终)必须进行垃圾回收。这将使您的代码运行效率低于直接方法。
此外,没有其他人能够只看一眼您的代码并立即确切地知道它的含义。
答案 2 :(得分:0)
我可以在您的代码中看到性能问题。您正在不必要地创建列表对象。 Java对象创建是您可以执行的最昂贵的操作。所以,我可以说使用"&&"或"切换案例"并避免在可能的情况下创建对象。