【问题标题】:Is there any difference between vbNullString and ""?vbNullString 和 "" 有什么区别吗?
【发布时间】:2015-09-07 09:29:35
【问题描述】:

在 VBA 中,如果我将字符串或类似字符串与 vbNullString 进行比较而不是与空字符串进行比较,会有什么不同吗? ""?如果有,两者有什么区别?

【问题讨论】:

标签: vba


【解决方案1】:

vbNullString"" 是不同的。这是描述内存使用差异的网页摘录。


"这是清除字符串变量的常用方法。

Text$ = ""

真是浪费!首先,字符串"" 每次使用都会占用6 个字节的RAM。考虑替代方案:

Text$ = vbNullString

那么这是什么? vbNullString 是一个特殊的 VB 常量,表示一个空字符串。 "" 文字是一个空字符串。有一个重要的区别。空字符串是真正的字符串。空字符串不是。它只是一个零。如果你懂 C 语言,vbNullString 相当于 NULL。

在大多数情况下,vbNullString 等同于 VB 中的""。唯一实际的区别是vbNullString 的分配和处理速度更快,并且占用的内存更少。

如果您调用某些非 VB API 或组件,请在分发您的应用程序之前使用 vbNullString 测试调用。您正在调用的函数可能不会检查 NULL 字符串,在这种情况下它可能会崩溃。非 VB 函数应在处理字符串参数之前检查 NULL。运气不好,您调用的特定函数不会这样做。在这种情况下,请使用""。通常 API 确实支持vbNullString,而且它们甚至可以用它表现得更好!”


本文的其余部分包含有关优化字符串的其他信息,这些信息也可能很有见地。

完整网页:http://www.aivosto.com/vbtips/stringopt.html

【讨论】:

    【解决方案2】:

    This comparison 声明将 "" 分配给变量使用 6 个字节的内存,而使用 vbNullString 不会使用任何内存。

    就个人而言,我更喜欢评估字符串的长度。如果长度为 0,那么我们也得出该字符串是 vbNullString"" 的结论。这种方法被认为是检查vbNullString 的最快方法。

    If Len(string) = 0 Then
    

    您可以阅读LenvbNullString"" 比较here

    【讨论】:

    • 看起来不错,除非其他人提供更多信息,否则我会将其标记为解决方案。但是,您链接到的最后一篇文章表明存在差异,尽管作者不知道它是什么。它当然可以像分配给变量时占用的内存一样简单,正如您在前面的回答中指出的那样。
    • 有区别,""是一个现有的零长度字符串,vbNullString是一个String类型的空指针(不指向字符串)。出于对比VBhides the difference的目的,但有时你想unhide it
    • 第二个链接失效:here is an archive
    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2013-02-03
    • 2021-06-03
    相关资源
    最近更新 更多