В VBA будет ли какая-либо разница, если я сравню строку или подобное с vbNullString
вместо пустой строки; ""
? Если да, то какие различия между ними?
Есть ли разница между vbNullString и ""?
Ответ 1
vbNullString
и ""
отличаются. Ниже приведен пример веб-страницы, описывающий различия в использовании памяти.
"Это обычный способ очистки строковой переменной.
Text$ = ""
Какая трата! Прежде всего, строка ""
занимает 6 байт ОЗУ каждый раз, когда вы ее используете. Рассмотрим альтернативу:
Text$ = vbNullString
Так что это? vbNullString
- специальная константа VB, которая обозначает пустую строку. Литерал ""
представляет собой пустую строку. Там важная разница. Пустая строка - настоящая строка. Нулевая строка - нет. Это всего лишь ноль. Если вы знаете язык C, vbNullString
является эквивалентом NULL.
Для большинства целей vbNullString
эквивалентен ""
в VB. Единственное практическое отличие заключается в том, что vbNullString
быстрее назначает и обрабатывает и занимает меньше памяти.
Если вы вызываете какой-либо API или компонент, отличный от VB, протестируйте вызовы с помощью vbNullString
до распространения вашего приложения. Функция, которую вы вызываете, может не проверять строку NULL, и в этом случае она может упасть. Функции Non-VB должны проверять значение NULL перед обработкой строкового параметра. С неудачей, конкретная функция, которую вы вызываете, не делает этого. В этом случае используйте ""
. Обычно API поддерживают vbNullString
, и они могут даже лучше работать с ним! "
В остальной части статьи есть дополнительная информация об оптимизации строк, которые также могут быть проницательными.
Полная веб-страница: http://www.aivosto.com/vbtips/stringopt.html
Ответ 2
В этом сравнении указано, что для назначения переменной ""
переменной используется 6 байт памяти, тогда как использование vbNullString
не будет использовать какую-либо память.
Лично я предпочитаю оценивать длину строки. Если длина равна 0, то мы также приходим к выводу, что строка равна vbNullString
или ""
. Этот метод считается самым быстрым методом проверки на vbNullString
.
If Len(string) = 0 Then
Здесь вы можете прочитать сравнение Len
vs vbNullString
vs ""
здесь.