Javaにおける演算子とは、特定の処理や計算を行うための記号やキーワードであり、値や変数に対して演算を適用する役割を持ちます。その演算子によって操作される対象となる値や変数のことを被演算子と呼びます。
+-*/%==!=<<=>>=<<>>>>>=+=-=*=/=%=<<=>>=>>>=&=|=^=x ? a : b| 演算子 | 説明 |
|---|---|
| + | 加算 |
| - | 減算 |
| * | 乗算 |
| / | 除算 |
| % | 剰余 |
| 演算子 | 説明 |
|---|---|
| == | 等しい |
| != | 等しくない |
| < | 小さい |
| <= | 以下 |
| > | 大きい |
| >= | 以上 |
| instanceof | オブジェクトが別のオブジェクトのインスタンスかどうか |
instanceof 演算子は、指定クラスのインスタンスかどうかを調べる演算子で、true か false が返されます。
インスタンス名 instanceof クラス名
instanceof 演算子を使用したJavaソースコードの例を次に示します。
String a = new String();
if ( a instanceof String ) {
System.out.println("a は String のインスタンスです。");
} else {
System.out.println("a は String のインスタンスではありません。");
}
Java には以下に示す論理演算子(ブール演算子)がある。
| 演算子 | 説明 |
|---|---|
| && | 論理積 (AND) |
| || | 論理和 (OR) |
| ^ | 排他的論理和 (XOR) |
| ! | 否定 (NOT) |
Javaにおける論理積(AND)論理演算子
| 式 | 値 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
Javaにおける論理和(OR)論理演算子
| 式 | 値 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
Javaにおける否定(NOT)論理演算子
| 式 | 値 |
|---|---|
| ! true | false |
| ! false | true |
| 演算子 | 説明 |
|---|---|
| << | 左シフト |
| >> | 算術右シフト(符号あり右シフト) |
| >>> | 論理右シフト(符号なし右シフト) |
<< 演算子は、被演算子の値を指定されたビット数だけ左へシフトします。 >> 演算子は、被演算子の値を指定されたビット数だけ右へ算術シフトします(符号あり)。 >>> 演算子は、被演算子の値を指定されたビット数だけ右へ論理シフトします(符号なし)。
次の例は、1を2ビット左へシフト(つまり4倍)した値を変数
x
に代入します。
x = 1 << 2;
| 演算子 | 説明 |
|---|---|
| = | 代入 |
| += | 加算値を代入 (a += bはa = a + bと同じ)
|
| -= | 減算値を代入 (a -= bはa = a - bと同じ)
|
| *= | 乗算値を代入 (a *= bはa = a * bと同じ)
|
| /= | 除算値を代入 (a /= bはa = a / bと同じ)
|
| %= | 剰余値を代入 (a %= bはa = a % bと同じ)
|
| <<= | 左シフトした値を代入 (a <<= bはa = a << bと同じ)
|
| >>= | 算術右シフト(符号あり右シフト)した値を代入 (a >>= bはa = a >> bと同じ)
|
| >>>= | 論理右シフト(符号なし右シフト)した値を代入 (a >>>= bはa = a >>> bと同じ)
|
| &= | ビット論理積(AND)の値を代入 (a &= bはa = a & bと同じ)
|
| |= | ビット論理和(OR)の値を代入 (a |= bはa = a | bと同じ)
|
| ^= | ビット排他的論理和(XOR)の値を代入 (a ^= bはa = a ^ bと同じ)
|
増分演算子(インクリメント演算子)とは、変数の値を1つ増やす演算子である。変数の値を増やしてから変数の値を評価する前置増分演算子と、変数の値を評価してから変数の値を増やす後置増分演算子がある。
| 名前 | 例 |
|---|---|
| 前置増分演算子 | ++x |
| 後置増分演算子 | x++ |
前置増分演算子は、以下に示す順序で演算と評価を行う。
前置増分演算子の例を次に示す。
int x = 1;
int y = ++x; // x = 2, y = 2
これは、次のコードと同じである。
int x = 1;
int y;
x = x + 1;
y = x;
後置増分演算子は、以下に示す順序で演算と評価を行う。
後置増分演算子の例を次に示す。
int x = 1;
int y = x++; // x = 2, y = 1
これは、次のコードと同じである。
int x = 1;
int y;
y = x;
x = x + 1;
減分演算子(デクリメント演算子)とは、変数の値を1つ減らす演算子である。変数の値を減らしてから変数の値を評価する前置減分演算子と、変数の値を評価してから変数の値を減らす後置減分演算子がある。
| 名前 | 例 |
|---|---|
| 前置減分演算子 | --x |
| 後置減分演算子 | x-- |
前置減分演算子は、以下に示す順序で演算と評価を行う。
前置減分演算子の例を次に示す。
int x = 1;
int y = --x; // x = 0, y = 0
これは、次のコードと同じである。
int x = 1;
int y;
x = x - 1;
y = x;
後置減分演算子は、以下に示す順序で演算と評価を行う。
後置減分演算子の例を次に示す。
int x = 1;
int y = x--; // x = 0, y = 1
これは、次のコードと同じである。
int x = 1;
int y = x;
x = x - 1;
三項演算子とは、被演算子を3つとる演算子のことである。英語では「ternary operator」という。Javaでは三項演算子を次のように記述する。
条件式 ? 値1 : 値2
条件式が真であれば値1が評価され、条件式が偽であれば値2が評価される。たとえば、三項演算子は次のように使う。
max = (a > b ? a : b);
a の値が b の値より大きければ max = a が実行され、a の値が b の値以下であれば max = b が実行される。
三項演算子を使った式を、if文を使って表現すると次のようになる。
if (a > b) {
max = a;
} else {
max = b;
}
カンマで区切られた複数の式を左から順に実行します。
a = 1, b = 2;
順次演算子は、for文で使われることが多いです。
for (i = 0, j = 0; i > 0; i--)
演算子には優先順位があります。次に演算子の優先順位を示します。
| 優先順位 | 演算子の種類 | 演算子 | ||
|---|---|---|---|---|
| 高い ↑ ↓ 低い |
式 | () [] . | ||
| 単項演算子 | ! ~ ++ - (cast) | |||
| 2項演算子 | インスタンス | instanceof | ||
| 剰余 | * / % | |||
| 加減 | + - | |||
| シフト | << >>> >> | |||
| 比較 | < <= > >= | |||
| 等値、非等値 | == != | |||
| ビット演算子 | 論理積 | & | ||
| 排他的論理和 | ^ | |||
| 論理和 | | | |||
| 論理積 | && | |||
| 論理和 | || | |||
| 3項演算子 | ? : | |||
| 代入演算子、複合代入演算子 | = += -= *= /= %= <<= >>>= >>= &= ^= |= | |||
| 順次演算子 | , | |||
同順位の演算子が並んだ場合、原則として左にあるものから評価されます。ただし、単項演算子および代入演算子、複合代入演算子は、右にあるものから評価されます。
演算子は括弧で囲んだ式が優先されます。たとえば、次の2つの式は演算結果が異なります。
x = 1 + 2 * 3;
y = (1 + 2) * 3;
上記の式の場合、x の値は7、yの値は9になります。