FindBugs告诉我我有以下错误:
原语被装箱,然后立即取消装箱。这可能是由于在需要未装箱值的地方进行手动装箱,因此迫使编译器立即撤消装箱的工作。
以下是相关代码:
...
String str= "10.0";
Double d = (str != null ? Double.valueOf(str) : new Double(0.0));
...
这是什么意思,我该如何解决?
答案 0 :(得分:5)
看起来像FindBugs中的一个错误。如果您编译该代码然后在其上运行javap -c
,它就不会调用doubleValue()
,这通常用于取消装箱。
不可否认,您可能希望将缓存的Double
用于零,而不是每次执行时都分配一个,但除此之外我认为合理......
我建议你向FindBugs团队报告。
编辑:在向FindBugs团队报告此问题之前,我会使用简短但完整的程序更新您的问题,该程序会演示此问题。我接受了你的话,你向我们展示的代码是FindBugs抱怨的代码。如果情况并非如此,那么所有赌注都将被取消:)
答案 1 :(得分:3)
我尝试了你的代码 - FindBugs没有显示任何错误。我认为这段代码明显不同于产生错误。
答案 2 :(得分:0)
您不需要任何自动装箱或拆箱。
double d = str == null ? 0.0 : Double.parseDouble(str);
道德是,当你打算使用原语时,不要使用Object。
恕我直言,使用正面表达而不是负面和双面负布尔表达式会更容易混淆。