not - comparar un string con un arreglo java
¿Cómo comparar dos cadenas cuando ambas pueden ser nulas? (3)
De Objects.equals()
:
return (a == b) || (a != null && a.equals(b));
Muy sencillo, autoexplicativo y elegante.
Esta pregunta ya tiene una respuesta aquí:
- Compara dos objetos en Java con posibles valores nulos 11 respuestas
Soy consciente de que es mejor llamar al método equals
sobre el uso del operador ==
(consulte esta pregunta ). Quiero que dos cadenas se comparen como iguales si ambas son nulas o si representan la misma cadena. Desafortunadamente, el método equals
arrojará un NPE
si las cadenas son null
. Mi código es actualmente:
boolean equals(String s1, String s2) {
if (s1 == null && s2 == null) {
return true;
}
if (s1 == null || s2 == null) {
return false;
}
return s1.equals(s2);
}
Esto es poco elegante. ¿Cuál es la forma correcta de realizar esta prueba?
Si Java 7+, usa Objects.equals()
; su documentación especifica explícitamente que:
[...] si ambos argumentos son nulos, se devuelve verdadero y si un argumento es nulo, se devuelve falso. De lo contrario, la igualdad se determina utilizando el método igual del primer argumento.
que es lo que quieres
Si no lo hace, su método puede reescribirse a:
return s1 == null ? s2 == null : s1.equals(s2);
Esto funciona porque el contrato .equals()
garantiza que para cualquier objeto o
, o.equals(null)
siempre es falso.
Si no puedes usar la solución Java 7+, pero tienes Guava o Commons Lang en classpath, entonces puedes usar lo siguiente:
Guayaba
import com.google.common.base.Objects;
Objects.equal(s1, s2);
Commons Lang :
import org.apache.commons.lang3.builder.EqualsBuilder;
new EqualsBuilder().append(s1, s2).isEquals();
o
import org.apache.commons.lang3.StringUtils;
StringUtils.equals(s1, s2);