Какова правильная позиция литералов в сравнении строк? - PullRequest
8 голосов
/ 24 июня 2010

У меня

if (localName.equals("TaxName")) {

, но PMD говорит

Position literals first in String comparisons

Ответы [ 5 ]

25 голосов
/ 24 июня 2010

"TaxName".equals(localName) лучше, как если бы localName было нулевым, вы не получите исключение нулевого указателя.

8 голосов
/ 24 июня 2010

PMD также должен сообщать вам , почему генерирует это предупреждение. С документация по правилам на сайте PMD:

Поместите литералы первыми в сравнениях String - таким образом, если String равен нулю, вы не получите NullPointerException, он просто вернет false.

5 голосов
/ 24 июня 2010

Я предпочитаю сначала размещать литералы, то есть:

if ("TaxName".equals(localName)) { ...

Таким образом, вы получаете правильное сравнение для случая null вместо получения NullPointerException.

2 голосов
/ 24 июня 2010

Лично для меня это не имеет смысла. Если код перехватывает исключение NullPointerException, значит, он завершил работу, которую вам не придется делать позже. Если localName окажется нулевым, и это позже вызовет проблему, отследить его будет сложнее. Не меняйте код, чтобы сделать компилятор счастливым. Если ваш код генерирует исключение NullPointerException, то он сохраняется, и вы откладываете время позже.

0 голосов
/ 12 сентября 2016

Чтобы избежать этого предупреждения, более простым решением является проверка нулевых указателей ранее, что рекомендуется для каждого объекта, которым мы управляем, а не только в этом случае:

if (localName!=null && localName.equals("TaxName")) {
    ...
}
...