2013-07-18 2 views
1

Я прочитал эту SO нить: Java, check whether a string is not null and not empty?Пустая строка Validation

Вопрос, который возникает (и не отвечал в этой теме), является:

Why is string.isEmpty() better than using string.equals("") ? В том же ответе плакат гласит, что перед для J6 люди использовали бы string.length == 0 в качестве способа проверки пустых строк. Я что-то пропустил, потому что все они, похоже, делают то же самое ... делая это как раз из , украшая ваш код.

+1

просто украшающий ваш код ... посмотрите на источник, 'isEmpty()' использует 'string.length == 0' ... – Lucas

+1

Вероятно, скорость выполнения. Проблема в том, что каждая новая версия браузера заставляет ту или иную функцию занимать меньше времени для выполнения, поэтому разговор получает другой ответ в зависимости от того, когда это произошло. –

ответ

4

Почему string.isEmpty() лучше, чем использование string.equals ("")?

Просто посмотрите на источник String#isEmpty():

public boolean isEmpty() { 
    return count == 0; 
} 

Он просто возвращает результат сравнения count переменную хранящуюся как часть класса с 0. Нет тяжелых вычислений. Значение уже есть.

В то время как метод String.equals() делает много вычислений, а именно, типажей, ссылочного сравнения, сравнения длиной - String#equals(Object) source code. Таким образом, чтобы избежать этих операций во время выполнения, вы можете просто использовать isEmpty() для проверки пустых строк. Тем не менее, это было бы медленнее.


Примечание:Oracle Java 7 версия String.isEmpty() использует value.length == 0, так как это no more stores переменная count и offset. В openjdk-7, однако он все еще использует переменную count.

Но все же вычисление value.length будет немного быстрее, чем все эти операции в методе equals().
Помимо отличия в производительности, которая на самом деле не вызывает большой озабоченности, и разница, если таковая будет в любой момент, метод String.isEmpty() кажется более понятным в отношении ваших намерений. Поэтому я предпочитаю использовать этот метод для проверки пустых строк.

И наконец, конечно, не верю на то, что вы видите. Просто сравните свой код с использованием обоих методов и посмотрите на какие-либо измеримые различия, если таковые имеются.

+0

Осторожно, это java 6-. Java 7 использует 'value.length == 0', поскольку больше не используется' char [] '. –

+0

@SotiriosDelimanolis. Ой! Это? Дай мне проверить. –

+0

@SotiriosDelimanolis. Просто проверил. Это все равно. –

6

лучше использовать это

"".equals(yourString) 

как это позволяет избежать исключения нулевого указателя.

Если вы используете

string.equals("") 

и если ваша строка имеет нулевое значение, он будет бросать исключения нулевого указателя.

и снова проблема с isEmpty что

Он возвращает истину, если, и только если, длина() составляет 0

Так что, если ваша строка пуста это также вызовет NPE.

+0

Я согласен, что это лучше, хотя, к сожалению, это не так красиво (и не совсем понятно). – iamnotmaynard

+1

вот какие кодовые комментарии! ; -P – SnakeDoc

+1

Что-то нужно сказать для самодокументирующего кода. Я не уверен, что согласен с @snakedoc. – BlackVegetable

3

Звонок isEmpty() выражает ваши намерения лучше, тем самым улучшая читаемость. Читатели тратят меньше времени на понимание того, каково ваше намерение по сравнению с проверкой: вместо того, чтобы думать, что вы заинтересованы в проверке равенства строк или определении его длины, они видят, что все, что вы хотите знать, это то, что строка пуста или нет.

Не существует разницы в производительности, так как isEmpty() реализуется путем проверки длины.

1

как заявил Лукас, он не лучше другого ... isEmpty немного читабельнее, не более того, не что иное. Там нет значительного удара производительности или чего-то подобного, использующего один над другим.

0

Существует много способов получить один ответ, все зависит от языка программирования и того, как программировать его.

Для примера в C#:

if (String.IsNullOrEmpty(s)) 
    return "is null or empty"; 
+0

Да, но этот вопрос отмечен * Java *. – arshajii

0

Используйте метод Util обеспечивается Apache Commons

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isEmpty%28java.lang.String%29

Если вы чувствуете, как вы даже можете написать свой собственный IsEmpty (вход String) метод

Этот подход имеет следующие преимущества Он делает ваши намерения чистыми Y ou безопасны в случае нулей.

Смежные вопросы