比較運算子 (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
。