自动装箱错误

时间:2011-06-28 06:00:07

标签: java findbugs

FindBugs告诉我我有以下错误:

  

原语被装箱,然后立即取消装箱。这可能是由于在需要未装箱值的地方进行手动装箱,因此迫使编译器立即撤消装箱的工作。

以下是相关代码:

...
String str= "10.0";
Double d = (str != null ? Double.valueOf(str) : new Double(0.0));
...

这是什么意思,我该如何解决?

3 个答案:

答案 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。

恕我直言,使用正面表达而不是负面和双面负布尔表达式会更容易混淆。