比较运算符 (Visual Basic)
下面是 Visual Basic 中定义的比较运算符。
<
运算符
<=
运算符
>
运算符
>=
运算符
=
运算符
<>
运算符
这些运算符比较两个表达式,确定它们是否相等;如果不相等,则确定它们有何不同。 Is
、IsNot
和 Like
在单独的帮助页面上进行了详细讨论。 本页详细讨论关系比较运算符。
语法
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
组成部分
result
必需。 一个 Boolean
值,表示比较的结果。
expression1
,expression2
必需。 任何表达式。
comparisonoperator
必需。 任何关系比较运算符。
object1
,object2
必需。 任何引用对象名称。
string
必需。 任何 String
表达式。
pattern
必需。 任何 String
表达式或字符范围。
注解
下表列出了关系比较运算符以及决定 result
是 True
还是 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
类型的表达式与 Single
或 Double
类型的表达式进行比较时,Decimal
表达式会转换为 Single
或 Double
。 对于 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 Strict
为 Off
,并且 expression1
或 expression2
是 Object
表达式,运行时类型会确定其比较方式。 下表说明如何比较表达式以及比较的结果,具体取决于操作数的运行时类型。
如果操作数为 | 比较方式为 |
---|---|
两个 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
。