Сравнение строк Java: выбор стиля или оптимизация? - PullRequest
9 голосов
/ 14 июля 2010

Я посмотрел на некоторый код GWT, написанный разными людьми, и есть разные способы сравнения строк.Мне любопытно, если это просто выбор стиля, или один из них более оптимизирован, чем другой:

"".equals(myString);

myString.equals("");

myString.isEmpty();

Есть ли разница?

Ответы [ 5 ]

14 голосов
/ 14 июля 2010
"".equals(myString);

не будет выбрасывать NullPointerException, если myString равно нулю.Вот почему многие разработчики используют эту форму.

myString.isEmpty();

- лучший способ, если myString никогда не является нулевым, потому что оно объясняет, что происходит.Компилятор может оптимизировать это или myString.equals(""), так что это скорее выбор стиля.isEmpty() показывает ваши намерения лучше, чем equals(""), поэтому, как правило, предпочтительнее.

5 голосов
/ 14 июля 2010

Остерегайтесь того, что isEmpty() было добавлено в Java 6, и, к сожалению, все еще есть люди, которые довольно громко жалуются, если вы не поддерживаете Java 1.4.

2 голосов
/ 14 июля 2010

apache StringUtils предоставляет несколько удобных методов для работы со строками.

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#isBlank(java.lang.CharSequence)

проверить этот метод и связанные с ним.

0 голосов
/ 14 июля 2010

myString.isEmpty (), вероятно, лучше всего подходит, если вы работаете с последней версией Java (1.6). Скорее всего, он работает лучше, чем myString.equals (""), так как ему нужно проверить только одну строку.

"". Equals (myString) обладает свойством не генерировать исключение нулевого указателя, если myString равно null. Однако только по этой причине я бы избегал этого, так как обычно лучше быстро потерпеть неудачу, если вы попали в неожиданное состояние. Иначе в будущем будет очень сложно отследить какую-нибудь небольшую ошибку ...

myString.equals ("") - наиболее естественный / идиоматический подход для людей, которые хотят сохранить совместимость со старыми версиями Java, или просто хотят быть очень откровенными о том, с чем они сравниваются.

0 голосов
/ 14 июля 2010

Обе опции, использующие "", могут требовать создания временного объекта String, но функция .isEmpty () не должна.

Если им не хотелось включать функцию .isEmpty ()вероятно, лучше использовать его!

...