VB.NET中有三种数据类型:值类型、引用类型与Nullable类型。本文将从条件判断入手,讨论三者之间的区别。
值类型
继承自System.ValueType的类通常被称为值类型,包括日期与数字。日期型对象的默认值为“0001-01-01 00:00:00”,而数字型对象的默认值为“0”。有两种方法指定值类型的默认值:不设值或设置为Nothing。如:
上面的两个变量值均为“0001-01-01 00:00:00”。将Nothing设置给值类型变量是为其指定默认值,这一点的确有点难以理解,不过确是如此。如下例:
判断值类型变量是否相等只能使用“=”。如:
引用类型
与值类型对应的是引用类型,字符或字符串类型均为引用类型。引用类型的变量保存了对象的地址,将此类变量设置为Nothing时,其指向的就是空地址。
除了使用“=”进行判断外,引用类型的变量还可以通过“Is”进行判断。“ = ”用于比较两个对象的内容是否相同;“Is”则用于比较两个引用是否指向同一个对象。下面的例子可以证明这一点:
Nullable类型
如果想要让值类型的变量具有引用类型的特征,我们可以借助于Nullable类型。如下例:
Nullable类型是一种介于值类型与引用类型之间的类型,我们可以使用“Is”判断Nullable变量是否为Nothing,但不能利用“Is”判断两个Nullable变量是否引用同一个对象;另一方面我们也可以利用“=”判断两个对象的内容是否相同,但某些场合对Nullable变量的判断不会返回我们熟悉的True或False。如下例:
通过查看内存可以知道,上例中 (Tmp = 1) 或 (Tmp <> 1) 返回的都是Nothing,而不是True或者False。这种现象将直接导致误判,如何避免这种现象发生呢?
请使用Nullable类提供的静态方法对Nullable变量进行比较。 上述代码可以如下改造:
总而言之,VB.NET的三种数据类型各有其用法,应特别注意Nullable类型的用法。