+ 演算子 (Visual Basic)
2 つの数を加算するか、数値式の正の値を返します。2 つの文字列式を連結するためにも使用できます。
expression1 + expression2
- or -
+ expression1
指定項目
語句 |
定義 |
expression1 |
必ず指定します。任意の数式または文字列式を指定します。 |
expression2 |
+ 演算子が負の値を計算している場合を除き、必ず指定します。任意の数式または文字列式を指定します。 |
結果
expression1 と expression2 がどちらも数値の場合、結果は 2 つの合計を計算した値になります。
expression2 が指定されなければ、+ 演算子は単項恒等演算子となり、式の値は変わりません。つまり、演算において expression1 の符号が保持されるため、expression1 が負であれば結果は負になります。
expression1 と expression2 がどちらも文字列であれば、結果は 2 つの値を連結した文字列になります。
expression1 と expression2 の型が異なる場合は、2 つの型、内容、および Option Strict ステートメント の設定に応じて異なる処理が行われます。詳細については、「解説」の表を参照してください。
サポートされている型
unsigned 型と浮動小数点型を含むすべての数値型、および 10 進型 (Decimal)、文字列型 (String)。
解説
一般に、+ は可能であれば加算を行い、両方の式が文字列の場合にだけ連結を行います。
どちらの式も Object でない場合、Visual Basic は次の処理を行います。
式のデータ型 |
コンパイラによる処理 |
両方の式が数値型 (SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong、Decimal、Single、または Double) の場合 |
加算。結果のデータ型は、expression1 と expression2 のデータ型に適した数値型です。「演算子の結果のデータ型 (Visual Basic)」の「整数演算」の表を参照してください。 |
両方の式が文字列型 (String) の場合 |
文字列連結。 |
一方が数値データ型で他方が文字列の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、String が Double に暗黙的に変換されて加算されます。 String を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
一方が数値で他方が Nothing (Visual Basic) の場合 |
Nothing を値 0 として加算が行われます。 |
一方が文字列で他方が Nothing の場合 |
Nothing を値 "" として連結が行われます。 |
一方の式が Object 式である場合、Visual Basic は次の処理を行います。
式のデータ型 |
コンパイラによる処理 |
Object 式に数値が格納され、もう一方が数値型の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、加算が行われます。 |
Object式に数値が格納され、もう一方が文字列型の場合String 型です。 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、String が Double に暗黙的に変換されて加算されます。 String を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
Object 式に文字列が格納され、もう一方が数値型の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、文字列の Object が Double に暗黙的に変換されて加算されます。 文字列の (Object) を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
Object式に文字列が格納され、もう一方が String 型です。 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、Object が String に暗黙的に変換されて連結されます。 |
両方の式が Object である場合、Visual Basic は次の処理を行います (Option Strict Off の場合のみ)。
式のデータ型 |
コンパイラによる処理 |
両方の Object 式に数値が格納されている場合 |
加算。 |
両方の Object 式が文字列型 (String) である場合 |
文字列連結。 |
一方の Object 式に数値が格納され、他方に文字列が格納されている場合 |
文字列の Object を倍精度浮動小数点数型 (Double) に暗黙的に変換して加算します。 文字列の Object を数値に変換できない場合は、InvalidCastException 例外がスローされます。 |
いずれかの Object 式が Nothing または DBNull に評価される場合、+ 演算子はそれを値 "" の String として扱います。
[!メモ]
+ 演算子を使用すると、加算と文字列連結のどちらが行われるのか、事前にはわかりにくい場合があります。連結に & 演算子を使用することで、あいまいさがなくなり、プログラムの可読性が向上します。
オーバーロード
+ 演算子は オーバーロード できます。つまり、オペランドがそのクラスまたは構造体の型であれば、クラスまたは構造体がこの動作を再定義できます。このようなクラスまたは構造体でこの演算子を使用している場合、再定義された動作を確認してください。詳細については、「演算子プロシージャ (Visual Basic)」を参照してください。
使用例
+ 演算子を使って数値を加算する例を次に示します。両方のオペランドが数値であれば、Visual Basic は算術演算を行います。算術演算の結果は、2 つのオペランドの合計になります。
Dim sumNumber As Integer
sumNumber = 2 + 2
sumNumber = 4257.04 + 98112
' The preceding statements set sumNumber to 4 and 102369.
+ 演算子を使用して、文字列を連結することもできます。両方のオペランドが文字列であれば、Visual Basic はこれらを連結します。連結結果は 2 つのオペランドの内容を前後につなげた単一の文字列になります。
オペランドの型が同じでない場合、結果は Option Strict ステートメント の設定によって異なります。Option Strict が On であれば、結果は次の例のようになります。
Option Strict On
Dim var1 As String = "34"
Dim var2 As Integer = 6
Dim concatenatedNumber As Integer = var1 + var2
...
' The preceding statement generates a COMPILER ERROR.
Option Strict が Off であれば、結果は次の例のようになります。
Option Strict Off
Dim var1 As String = "34"
Dim var2 As Integer = 6
Dim concatenatedNumber As Integer = var1 + var2
...
' The preceding statement returns 40 after the string in var1 is
' converted to a numeric value. This might be an unexpected result.
' We do not recommend use of Option Strict Off for these operations.
あいまいさをなくすため、連結には + 演算子ではなく & 演算子を使うようにしてください。