Nothing 关键字

        今天无意中发现了一个有关Nothing的问题,结果经过查MSDN基本可以解释了。小弟不才,如有错误或者不全面的地方还望各位高人多多指点。^_^ 

        我的代码是这样的:

         If  ( String .Empty  Is   Nothing Then
            Response.Write(
" str is Nothing " )
        
End   If

        
If  ( String .Empty  =   Nothing Then
            Response.Write(
" String.Empty = Nothing " )
        
End   If

       输出的结果是:String.Empty = Nothing。这里说明String.Empty Is Nothing 是不成立的(废话)。为什么两个判断语句一个成立,一个不成立呢?唯一的不同就是运算符不同。一个是Is , 一个是 =。 通过查询MSDN,对Is 运算符得到如下的定义:

      “Is 运算符确定两个对象引用是否引用同一个对象。但是,它不执行值比较。如果 object1object2 都引用同一个对象,则 resultTrue;否则 resultFalse。”

       很明显这里说明String.Empty与Nothing所指的不是一个对象。那么为什么不一样呢?先看看Nothing关键字的定义,同上出自MSDN,内容如下:

       “Nothing 是一个特殊的文本;它不被视为具有类型,并可转换为类型系统中的所有类型。当转换为特定的类型时,它等于该类型的默认值。”

        “Nothing 关键字表示任何数据类型的默认值。将 Nothing 赋给变量将把该变量设置为其声明类型的默认值。如果该类型包含变量成员,则这些成员都会设置为其默认值。”

         “如果变量是引用类型(即对象变量),则 Nothing 意味着该变量不与任何对象相关联。”

          特别是最后一句话,如果Nothing是不与任何对象关联,也就是Nothing实际在内存中没有占用任何的内存空间。如果String.Empty Is Nothing 这个表达式不成立的话。说明String.Empty是占内存空间的。为了证明这一点,我们用以下的代码来验证String.Empty实际已经实例化了:

          Response.Write(String.Empty.CompareTo(""))

         运行程序以后,输出为"0", CompareTo的函数定义是:

          Public Function CompareTo(ByVal strB As String) As Integer

         由于没有Shared关键字,所以调用它必须是String类的实例,这样就说明了String.Empty确实在内存中占有地址。所以 String.Empty Is Nothing 是不成立的。

         现在回过头来看看为什么String.Empty = Nothing成立。同样关注Nothing在MSDN中的定义的第一句话,“当转换为特定的类型时,它等于该类型的默认值。”。这个时候=两边的变量进行比较。Nothing将转化成String类型的默认值。而用Dim str As String声明的变量的默认值就是String.Empty,所以这个是成立的。这里可以去看看MSDN中举的例子,更加直观。End Item

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值