Очевидный ответ на вопрос has already been given, но вот предупреждение, которое не является прямым ответом: obj.equals
также может потерпеть неудачу, если obj равно null. Таким образом, вы будете часто использовать такой код:
if(mystr1 != null && mystr1.equals(mystr2))
, потому что это
if(mystr1.equals(mystr2))
потерпит неудачу с NullPointerException, если mystr1 равна нулю.
Именно поэтому, когда строка сравнения является известной константой, следующий синтаксис часто используется:
if("ABCDEF".equals(mystr1))
вместо
if(mystr1.equals("ABCDEF"))
По этой причине, многие библиотеки (например, apache commons/lang) обеспечивающие функции, которые объединяют эти проверки:
// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String)
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object)
public static boolean equals(Object object1, Object object2) {
if (object1 == object2) {
return true;
}
if ((object1 == null) || (object2 == null)) {
return false;
}
return object1.equals(object2);
}
Использование этих методов обычно безопаснее, чем простые равные, если вы точно не знаете, что один из двух объектов не является нулевым.
Я бы предпочел использовать Findbugs для Eclipse .... был удачей для того, чтобы поймать эти маленькие проблемы с кодированием! – mikera
все это замечательно, особенно при совместном использовании на сервере непрерывной интеграции, таком как hudson (при условии, что люди действительно смотрят на результаты :-)) –
знаете ли вы, что любой из них запускается во время редактирования? мы уже запускаем пару из них как часть ночных сборок и создаем файлы отчетов. я хочу что-то, что делает подсветку ошибки/предупреждения, как только я набираю. –