objetos not con comparar caracteres cadenas arreglo java equals equality

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í:

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);