Visual Basic 中的運算子優先順序

當運算式中有數個作業同時進行時,會依稱為「運算子優先順序」的預定順序來評估和解析每個部分。

優先順序規則

當運算式包含來自多個類別的運算子時,會根據下列規則進行評估:

  • 算術和串連運算子的優先順序如下一節所述,而且全部高於比較、邏輯和位元運算子。

  • 所有比較運算子的優先順序會相等,而且全部高於邏輯和位運算子,但低於算術和串連運算子。

  • 邏輯和位元運算子的優先順序如下一節所述,而且全部低於算術、串連和比較運算子。

  • 優先順序相等的運算子會依出現在運算式中的順序,從左至右進行評估。

優先順序

運算子會依下列優先順序評估:

Await 運算子

Await

算術和串連運算子

乘冪 (^)

一元識別和否定 (+)

乘法和浮點數除法 (*/)

整數除法 (\)

模組式算術 (Mod)

加法和減法 (+)

字串串連 (&)

算術移位 (<<>>)

比較運算子

所有比較運算子 (=<><<=>>=IsIsNotLikeTypeOf...Is)

邏輯運算子和位元運算子

否定 (Not)

結合 (And, AndAlso)

包含析取 (OrOrElse)

互斥析取 (Xor)

註解

= 運算子只是相等比較運算子,而不是指派運算子。

字串串連運算子 (&) 不是算術運算子,但在優先順序方面與算術運算子同組。

IsIsNot 運算子是物件參考比較運算子。 這兩個運算子不會比較兩個物件的值,只會檢查兩個物件變數是否參考相同的物件執行個體。

關聯性

當運算式中同時出現優先順序相等的運算子時 (例如乘法和除法),編譯器會從左至右評估每項遇到的作業。 說明如下例。

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 明確指定該順序,則評估會相同。 n1n2 的結果都為 3。 相較之下,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.
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.

另請參閱