比较运算符 (Visual Basic)

下面是 Visual Basic 中定义的比较运算符。

< 运算符

<= 运算符

> 运算符

>= 运算符

= 运算符

<> 运算符

Is 运算符

IsNot 运算符

Like 运算符

这些运算符比较两个表达式,确定它们是否相等;如果不相等,则确定它们有何不同。 IsIsNotLike 在单独的帮助页面上进行了详细讨论。 本页详细讨论关系比较运算符。

语法

result = expression1 comparisonoperator expression2  
result = object1 [Is | IsNot] object2  
result = string Like pattern  

组成部分

result
必需。 一个 Boolean 值,表示比较的结果。

expression1expression2
必需。 任何表达式。

comparisonoperator
必需。 任何关系比较运算符。

object1object2
必需。 任何引用对象名称。

string
必需。 任何 String 表达式。

pattern
必需。 任何 String 表达式或字符范围。

注解

下表列出了关系比较运算符以及决定 resultTrue 还是 False 的条件。

运算符 True 是否 False 是否
<(小于) expression1 < expression2 expression1>= expression2
<=(小于或等于) expression1<= expression2 expression1 > expression2
>(大于) expression1 > expression2 expression1<= expression2
>=(大于或等于) expression1>= expression2 expression1 < expression2
=(等于) expression1 = expression2 expression1 <> expression2
<>(不等于) expression1 <> expression2 expression1 = expression2

注意

= 运算符也用作赋值运算符。

Is 运算符、IsNot 运算符和 Like 运算符具有与上表中的运算符不同的特定比较功能。

比较数字

Single 类型的表达式与 Double 类型的表达式进行比较时,Single 表达式会转换为 Double。 此行为与 Visual Basic 6 中的行为相反。

同样,将 Decimal 类型的表达式与 SingleDouble 类型的表达式进行比较时,Decimal 表达式会转换为 SingleDouble。 对于 Decimal 表达式,任何小于 1E-28 的小数值都可能会丢失。 此类小数值丢失可能会导致两个值在不相等时比较为相等。 因此,在使用相等运算符 (=) 比较两个浮点变量时应小心。 比较稳妥的做法是测试两个数字之间的差值的绝对值是否小于可接受的小容差。

浮点不精确性

使用浮点数时,请记住,它们在内存中不一定有精确的表示形式。 这可能会导致某些操作(例如值比较和 Mod 运算符)产生意外结果。 有关详细信息,请参阅数据类型疑难解答

比较字符串

比较字符串时,将根据字母排序顺序(取决于 Option Compare 设置)计算字符串表达式。

Option Compare Binary 根据派生自字符的内部二进制表示形式的排序顺序进行字符串比较。 排序顺序取决于代码页。 以下示例展示了典型的二进制排序顺序。

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text 根据由应用程序区域设置确定的不区分大小写的文本排序顺序进行字符串比较。 设置 Option Compare Text 并对前面示例中的字符排序时,将应用以下文本排序顺序:

(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)

区域设置依赖

设置 Option Compare Text 时,字符串比较的结果可能取决于应用程序运行时所使用的区域设置。 两个字符在一种区域设置中可能比较为相等,但在另一种区域设置中可能比较为不相等。 如果使用字符串比较来做出重要决策,例如是否接受登录尝试,应注意区域设置敏感性。 考虑设置 Option Compare Binary 或调用 StrComp,这会将区域设置考虑在内。

使用关系比较运算符的无类型编程

Option Strict On 下,不能将关系比较运算符与 Object 表达式结合使用。 如果 Option StrictOff,并且 expression1expression2Object 表达式,运行时类型会确定其比较方式。 下表说明如何比较表达式以及比较的结果,具体取决于操作数的运行时类型。

如果操作数为 比较方式为
两个 String 基于字符串排序特征的排序比较。
两个数值 对象转换为 Double,数值比较。
一个数值和一个 String String 转换为 Double 并执行数值比较。 如果无法将 String 转换为 Double,则会引发 InvalidCastException
其中一个或两个都是 String 以外的引用类型 引发 InvalidCastException

数值比较将 Nothing 视为 0。 字符串比较将 Nothing 视为 ""(空字符串)。

重载

可重载关系型比较运算符(<<=>>==<>),这意味着当操作数具有某一类或结构时,该类或结构可重新定义其行为。 如果代码对这种类或结构使用这些运算符中的任何一个,请确保了解重新定义的行为。 有关详细信息,请参阅 Operator Procedures

请注意,= 运算符只能作为关系比较运算符重载,不能作为赋值运算符重载。

示例

以下示例展示了用于比较表达式的关系比较运算符的各种用法。 关系比较运算符返回一个 Boolean 结果,表示所述表达式的计算结果是否为 True。 将 >< 运算符应用于字符串时,将使用字符串的标准字母排序顺序进行比较。 此顺序可能取决于区域设置。 排序是否区分大小写取决于 Option Compare 设置。

Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
    ' Insert code to run if x and y point to the same instance.
End If

在上面的示例中,第一个比较返回 False,其余比较返回 True

另请参阅