Le titre dit tout. Je teste généralement cela avec un string == null
, donc je ne suis pas vraiment préoccupé par un test de sécurité nulle. Lequel dois-je utiliser?
String s = /* whatever */;
...
if (s == null || "".equals(s))
{
// handle some edge case here
}
ou
if (s == null || s.isEmpty())
{
// handle some edge case here
}
Sur cette note - fait isEmpty()
même autre chose que return this.equals("");
ou return this.length() == 0;
?
isEmpty()
s'agit uniquement de Java 6+.Réponses:
Le principal avantage de
"".equals(s)
est que vous n'avez pas besoin de la vérification de null (equals
vérifiera son argument et retournerafalse
s'il est nul), ce dont vous semblez ne pas vous soucier. Si vous n'êtes pas inquiet d's
être nul (ou si vous le vérifiez autrement), j'utiliserais certainements.isEmpty()
; il montre exactement ce que vous vérifiez, vous vous souciez de savoir sis
c'est vide ou non , pas si cela équivaut à la chaîne videla source
getValue()
retourné null, vous obtiendrez une NullPointerException lors de l'toString()
appels
est null, vous ne pouvez pas appeler de méthodes dessus - il est nul.""
ne sera jamais nul, vous pouvez donc appeler des méthodes dessus en toute sécurité etequals()
pouvez gérer le cas où son argument est nulisEmpty()
vérifie la longueur interne d'un tableau privé alors queequals(Object anObject)
fait beaucoup plus (par exemple, vérificationinstanceof
). En termes de performances,isEmpty()
est généralement plus rapide.String.equals("")
est en fait un peu plus lent qu'un simpleisEmpty()
appel. Les chaînes stockent une variable de comptage initialisée dans le constructeur, car les chaînes sont immuables.isEmpty()
compare la variable count à 0, tandis que equals vérifie le type, la longueur de la chaîne, puis effectue une itération sur la chaîne à des fins de comparaison si les tailles correspondent.Donc, pour répondre à votre question, vous
isEmpty()
en ferez beaucoup moins! et c'est une bonne chose.la source
Une chose que vous voudrez peut - être envisager d' ailleurs les autres questions mentionnées est que
isEmpty()
a été introduit en 1.6, donc si vous l' utilisez, vous ne serez pas en mesure d'exécuter le code sur Java 1.5 ou ci - dessous.la source
Vous pouvez utiliser apache commons StringUtils isEmpty () ou isNotEmpty ().
la source
Cela n'a pas vraiment d'importance.
"".equals(str)
est plus clair à mon avis.isEmpty()
retournecount == 0
;la source
str.isEmpty()
c'est beaucoup plus clair que"".equals(str)
. Il se lit comme ce que vous vérifiez. Question d'opinion cependant, je suppose.J'ai écrit une classe de testeur qui peut tester les performances:
J'ai trouvé que l'utilisation de .isEmpty () prenait environ la moitié du temps de .equals ("").
la source