La risposta ovvia alla domanda has already been given, ma qui è un avviso che non è una risposta diretta: obj.equals
può anche fallire se obj è nullo. Così spesso si deve usare il codice come questo:
if(mystr1 != null && mystr1.equals(mystr2))
perché questo
if(mystr1.equals(mystr2))
sarebbe fallire con un NullPointerException se mystr1 è nullo.
È per questo che, quando la stringa di confronto è un noto costante, la seguente sintassi è spesso usato:
if("ABCDEF".equals(mystr1))
piuttosto che
if(mystr1.equals("ABCDEF"))
Per questo motivo, molte librerie (come apache commons/lang) fornire funzioni di utilità che combinano questi controlli:
// 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);
}
L'utilizzo di questi metodi è solitamente più sicuro degli uguali, a meno che non si sia sicuri che uno dei due oggetti non sia nullo
fonte
2010-07-13 14:49:18
Definirei definitivamente l'utilizzo di Findbugs per Eclipse .... è stata una manna dal cielo per aver catturato questi piccoli problemi di codifica! – mikera
sono tutti ottimi, specialmente se usati insieme su un server di integrazione continuo come hudson (a patto che le persone guardino effettivamente ai risultati :-)) –
sai se qualcuno di questi viene eseguito in fase di modifica? ne stiamo già eseguendo un paio come parte di build notturne e generando file di report. Voglio qualcosa che fa l'errore/avvertimento evidenziando proprio mentre digito. –