Dim a
Set a = Nothing
a = 1
MsgBox a
a = Null
MsgBox a有点疑惑,系统具体是怎么处理的?

解决方案 »

  1.   

    Nothing 就相当于释放了a,Null就是空了.
      

  2.   

    MSDN:
    set中的nothing:
    Nothing 可选的。断绝 objectvar 与任何指定对象的关联。若没有其它变量指向 objectvar 原来所引用的对象,将其赋为 Nothing 会释放该对象所关联的所有系统及内存资源。 使用 Nothing 关键字被将对象变量从实际对象中分离开来。要使用 Set 语句将 Nothing 赋值给对象变量。例如:Set MyObject = Nothing几个对象变量可以引用同一个实际对象。当 Nothing 被赋值给一个对象变量时,该变量不再引用任何实际对象。当几个对象变量引用同一个对象时,只有将全部对象变量都设置成 Nothing 之后,与被引用的对象有关联的内存资源及系统资源才会被释放掉,在这里,或者明确使用 Set,或者在最后一个设置成 Nothing 的对象变量超出范围后隐含地使用 Set。NULL:
    Null 关键字被用来作为 Variant 子类型。它说明变量不包含有效数据。Null 值:
    Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性: 对包含 Null 的表达式,计算结果总是 Null。于是说 Null 通过表达式“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为 Null。
    将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回 Null。
    Null 值经由返回 Variant 数据类型的内在函数传播。 
    也可用 Null 关键字指定 Null 值。Z = Null也可用 IsNull 函数测试 Variant 变量是否包含 Null 值。If IsNull (X) And IsNull (Y) Then
       Z = Null
    Else
       Z = 0
    End If如果将 Null 值赋予 Variant 以外的任何其它类型变量,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含 Variant 变量的表达式传播(尽管 Null 并不通过某些函数来传播)。可以从任何具有 Variant 返回值的函数过程返回 Null。除非明确将 Null 赋予变量,否则变量不会设置成 Null 值,所以,如果不在应用程序中使用 Null,就不必书写测试 Null 和处理 Null 的程序。
      

  3.   


    请看二楼解释!
    释放该对象的内存资源等..
    空(NULL)也占着内存的!
      

  4.   

    Sub Main()
        Dim a           'a 是 Variant 变量'
        Set a = Nothing 'a 成为 Variant/Object 子类型'
        a = 1           'a 成为 Variant/Integer 子类型'
        MsgBox a        'Integer 可以自动转化为 String,对话框可以显示'
        a = Null        'a 成为 Variant/Null 子类型'
        MsgBox a        'Null 不能自动转化为 String,出错'
    End Sub
      

  5.   

    Private Sub Form_Load()
    On Error Resume Next
    Dim a
    Debug.Print TypeName(a)
    Debug.Print a
    Set a = Nothing
    Debug.Print TypeName(a)
    Debug.Print a
    a = 1
    Debug.Print TypeName(a)
    Debug.Print a
    MsgBox a
    Debug.Print TypeName(a)
    Debug.Print a
    a = Null
    Debug.Print TypeName(a)
    Debug.Print a
    MsgBox a
    Debug.Print TypeName(a)
    Debug.Print a
    End Sub
    '输出:
    EmptyNothing
    Integer
     1 
    Integer
     1 
    Null
    Null
    Null
    Null