Ошибка автобокса - PullRequest
       5

Ошибка автобокса

4 голосов
/ 28 июня 2011

FindBugs говорит мне, что у меня есть следующая ошибка:

Примитив упаковывается, а затем сразу распаковывается. Вероятно, это связано с ручным боксом в месте, где требуется распакованное значение, что заставляет компилятор немедленно отменить работу бокса.

Вот соответствующий код:

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

Что это значит и как мне это исправить?

Ответы [ 3 ]

5 голосов
/ 28 июня 2011

Для меня это похоже на ошибку в FindBugs. Если вы скомпилируете этот код и затем запустите на нем javap -c, он никогда не вызовет doubleValue(), что обычно используется для распаковки.

По общему признанию, вы могли бы хотеть использовать кэшированный Double для нуля, вместо того, чтобы выделять по одному каждый раз, когда это выполняется, но кроме этого это выглядит разумным для меня ...

Я предлагаю вам сообщить об этом команде FindBugs.

РЕДАКТИРОВАТЬ: Перед тем, как сообщить об этом команде FindBugs, я бы обновил ваш вопрос короткой, но завершенной программой, которая демонстрирует проблему. Я согласился с тем, что код, который вы нам показали, - это код, на который жалуется FindBugs. Если это не так, все ставки сняты:)

3 голосов
/ 28 июня 2011

Я попробовал ваш код - FindBugs не отображает никаких ошибок.Я думаю, что этот код значительно отличается от того, что выдает ошибку.

0 голосов
/ 28 июня 2011

Вам не нужен авто-бокс или распаковка.

double d = str == null ? 0.0 : Double.parseDouble(str);

Мораль такова: не используйте объект, если вы хотите использовать примитив.

IMHO Менее запутанно использовать положительные выражения вместо отрицательных и двойных отрицательных логических выражений.

...