Название в основном говорит обо всем. Я обычно тестирую это вместе с a string == null
, так что я не очень обеспокоен нулевым тестом. Какой я должен использовать?
String s = /* whatever */;
...
if (s == null || "".equals(s))
{
// handle some edge case here
}
или
if (s == null || s.isEmpty())
{
// handle some edge case here
}
На этой ноте - isEmpty()
даже делает что-нибудь кроме return this.equals("");
или return this.length() == 0;
?
isEmpty()
это только Java 6+.Ответы:
Основное преимущество
"".equals(s)
заключается в том, что вам не нужна проверка на нулевое значение (equals
проверит ее аргумент и вернет значение,false
если оно равно нулю), которая, по-видимому, вас не беспокоит Если вы не беспокоитесь о том,s
чтобы быть нулевым (или иным образом проверяете это), я бы определенно использовалs.isEmpty()
; он показывает именно то, что вы проверяете, вас волнует,s
является ли он пустым или нет , равно ли оно пустой строкеисточник
getValue()
возвращено значение NULL, вы получитеtoString()
s
ноль, вы не можете вызывать методы для него - это ноль.""
никогда не будет нулевым, поэтому вы можете безопасно вызывать методы для него иequals()
обрабатывать случай, когда его аргумент равен нулюisEmpty()
проверяет внутреннюю длину частного массива, тогда какequals(Object anObject)
делает гораздо больше (например, проверяетinstanceof
). По производительности,isEmpty()
как правило, быстрее.String.equals("")
на самом деле немного медленнее, чем простоisEmpty()
звонок. Строки хранят переменную count, инициализированную в конструкторе, поскольку строки являются неизменяемыми.isEmpty()
сравнивает переменную count с 0, в то время как equals проверит тип, длину строки, а затем перебирает строку для сравнения, если размеры совпадают.Таким образом, чтобы ответить на ваш вопрос, на
isEmpty()
самом деле будет делать гораздо меньше! и это хорошо.источник
Одной вещью, которую вы могли бы рассмотреть помимо других упомянутых проблем, является то, что
isEmpty()
было введено в 1.6, поэтому, если вы используете его, вы не сможете запустить код на Java 1.5 или ниже.источник
Вы можете использовать Apache Commons StringUtils isEmpty () или isNotEmpty ().
источник
Это не имеет большого значения.
"".equals(str)
более понятно на мой взгляд.isEmpty()
возвращаетсяcount == 0
;источник
str.isEmpty()
что гораздо яснее, чем"".equals(str)
. Это читается как то, что вы проверяете. Вопрос мнения, хотя, я думаю.Я написал класс тестера, который может проверить производительность:
Я обнаружил, что использование .isEmpty () занимает примерно половину времени .equals ("").
источник