表達式中發生數個作業時,會以預先決定的順序評估並解析每個部分,稱為 運算符優先順序。
優先順序規則
當表達式包含來自多個類別的運算子時,會根據下列規則進行評估:
算術和串連運算符具有下一節所述的優先順序順序,且優先順序都高於比較、邏輯和位運算符。 優先順序越高,表示會先評估這些運算子。
所有比較運算子的優先順序都相等,且優先順序都高於邏輯和位運算符,但優先順序低於算術和串連運算符。
邏輯和位運算符具有下一節所述的優先順序,且優先順序都低於算術、串連和比較運算符。
優先順序相等的運算符會依表達式中出現的順序,由左至右評估。
優先順序順序
運算子會依下列優先順序進行評估。 最先列出的運算子具有較高的優先順序,並在稍後列出的運算子之前進行評估:
1. 等待操作員
等待
2. 算術運算子和串聯運算子
指數(^)
一元身份和否定 (+, –)
乘法和浮點除法 (*, /)
整數除法 (\)
模組化算術 (Mod)
加法和減法 (+, –)
字串串連 (&)
算術位移位 (<<, >>)
3. 比較運算子
所有比較運算子(=、<><<=>>=IsIsNotLike...) TypeOfIs
4. 邏輯運算子和位元運算子
否定 (Not)
結合 (And, AndAlso)
包容性分離 (Or, OrElse)
獨家解禁 (Xor)
評論
運算子 = 只是相等比較運算符,而不是指派運算符。
字串串連運算符 (&) 不是算術運算符,但優先順序會與算術運算符分組。
Is和 IsNot 運算子是對象參考比較運算元。 它們不會比較兩個 物件的值;它們只會檢查兩個物件變數是否參考相同的物件實例。
關聯性
當等優先順序的運算符一起出現在表達式中時,例如乘法和除法,編譯程式會在從左至右遇到每個作業時評估每個作業。 下列範例說明這點。
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
第一個表達式會評估除法 96 / 8(結果為 12),然後評估除法 12 / 4,結果為 3。 由於編譯程式會從左至右評估的作業 n1 ,因此當明確指出 n2該順序時,評估會相同。
n1和 n2 都有三個結果。 相較之下, n3 結果為 48,因為括弧會強制編譯程式先評估 8 / 4。
由於這種行為,運算符在Visual Basic中會 保持關聯 。
覆寫優先順序和關聯性
您可以使用括號來強制表達式的某些部分在其他人之前進行評估。 這可以覆寫優先順序和左關聯性。 Visual Basic 一律會執行在外部括弧中括住的作業。 不過,在括弧內,除非您在括弧內使用括弧,否則它會維持一般優先順序和關聯性。 下列範例說明這點。
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line. Division and multiplication (/, *) have higher
' precedence than addition and subtraction (+, -), so c / d * e
' is evaluated first, then the addition and subtraction from left to right.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.