La respuesta obvia a la pregunta has already been given, pero aquí hay una advertencia que no es una respuesta directa: obj.equals
también puede fallar si obj es nulo. Por lo que a menudo tiene que utilizar un código como éste:
if(mystr1 != null && mystr1.equals(mystr2))
porque este
if(mystr1.equals(mystr2))
fallarían con una NullPointerException si mystr1 es nulo.
Por eso, cuando la cadena de comparación es una constante, la siguiente sintaxis conocido es de uso frecuente:
if("ABCDEF".equals(mystr1))
en lugar de
if(mystr1.equals("ABCDEF"))
Por esta razón, muchas bibliotecas (como apache commons/lang) proporcionar funciones de utilidad que combinen estas verificaciones:
// 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);
}
El uso de estos métodos es generalmente más seguro que los iguales de fricción, a menos que sepa con certeza que uno de los dos objetos no es nulo
Definitivamente el segundo uso de Findbugs para Eclipse ... ha sido una bendición para detectar estos pequeños problemas de codificación. – mikera
todos estos son geniales, especialmente cuando se usan juntos en un servidor de integración continua como hudson (siempre que la gente realmente vea los resultados :-)) –
¿sabe si alguno de ellos se ejecuta en tiempo de edición? ya estamos ejecutando un par de estos como parte de compilaciones nocturnas y generando archivos de informes. quiero algo que resalte el error/advertencia a medida que escribo. –