El título básicamente lo dice todo. Por lo general, estoy probando esto junto con un string == null
, así que no estoy realmente preocupado por una prueba nula-segura. ¿Cuál debería usar?
String s = /* whatever */;
...
if (s == null || "".equals(s))
{
// handle some edge case here
}
o
if (s == null || s.isEmpty())
{
// handle some edge case here
}
En esa nota, ¿ isEmpty()
hace algo más que return this.equals("");
o return this.length() == 0;
?
isEmpty()
es Java 6+.Respuestas:
El principal beneficio de
"".equals(s)
es que no necesita la verificación nula (equals
verificará su argumento y devolveráfalse
si es nula), que parece no importarle. Si no le preocupas
ser nulo (o de lo contrario lo está comprobando), definitivamente lo usarías.isEmpty()
; muestra exactamente lo que está comprobando, le importa sis
está vacío o no , no si es igual a la cadena vacíafuente
getValue()
devuelve nulo, obtendría una NullPointerException cuandotoString()
se llamaras
es nulo, no puede invocar métodos, es nulo.""
nunca será nulo, por lo que puede invocar métodos de forma segura yequals()
puede manejar el caso donde su argumento es nuloisEmpty()
comprueba la longitud interna de una matriz privada, mientras queequals(Object anObject)
hace mucho más (por ejemplo, comprobacióninstanceof
). En cuanto al rendimiento,isEmpty()
generalmente es más rápido.String.equals("")
en realidad es un poco más lento que solo unaisEmpty()
llamada. Las cadenas almacenan una variable de recuento inicializada en el constructor, ya que las cadenas son inmutables.isEmpty()
compara la variable de recuento a 0, mientras que igual verificará el tipo, la longitud de la cadena y luego iterará sobre la cadena para comparar si los tamaños coinciden.Entonces, para responder a su pregunta, ¡en
isEmpty()
realidad hará mucho menos! y eso es buenofuente
Una cosa que quizás desee considerar además de los otros problemas mencionados es que
isEmpty()
se introdujo en 1.6, por lo que si lo usa, no podrá ejecutar el código en Java 1.5 o inferior.fuente
Puede usar Apache commons StringUtils isEmpty () o isNotEmpty ().
fuente
Realmente no importa.
"".equals(str)
Es más claro en mi opinión.isEmpty()
vuelvecount == 0
;fuente
str.isEmpty()
es mucho más claro que"".equals(str)
. Se lee como lo que estás comprobando. Sin embargo, creo que es cuestión de opinión.Escribí una clase de probador que puede probar el rendimiento:
Descubrí que usar .isEmpty () tomó alrededor de la mitad del tiempo de .equals ("").
fuente