Javaの演算子

値を計算したり、値を比較するには演算子を使う。ここではJavaの演算子について解説する。

算術演算子

Javaの算術演算子
演算子 説明
+ 加算
- 減算
* 乗算
/ 除算
% 剰余

比較演算子

Javaの比較演算子
演算子 説明
== 等しい
!= 等しくない
< 小さい
<= 以下
> 大きい
>= 以上
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)
George Boole
Figure 1. George Boole

論理積 (AND)

Javaにおける論理積(AND)論理演算子

論理積(AND)
true && true true
true && false false
false && true false
false && false false

論理和 (OR)

Javaにおける論理和(OR)論理演算子

論理和(OR)
true || true true
true || false true
false || true true
false || false false

否定 (NOT)

Javaにおける否定(NOT)論理演算子

否定(NOT)
! true false
! false true

ビット演算子

Javaのビット演算子
演算子 説明
<< 左シフト
>> 算術右シフト(符号あり右シフト)
>>> 論理右シフト(符号なし右シフト)

<< 演算子は、被演算子の値を指定されたビット数だけ左へシフトします。 >> 演算子は、被演算子の値を指定されたビット数だけ右へ算術シフトします(符号あり)。 >>> 演算子は、被演算子の値を指定されたビット数だけ右へ論理シフトします(符号なし)。

次の例は、1を2ビット左へシフト(つまり4倍)した値を変数 x に代入します。

x = 1 << 2;

代入演算子

Javaの代入演算子
演算子 説明
= 代入
+= 加算値を代入 (a += ba = a + bと同じ)
-= 減算値を代入 (a -= ba = a - bと同じ)
*= 乗算値を代入 (a *= ba = a * bと同じ)
/= 除算値を代入 (a /= ba = a / bと同じ)
%= 剰余値を代入 (a %= ba = a % bと同じ)
<<= 左シフトした値を代入 (a <<= ba = a << bと同じ)
>>= 算術右シフト(符号あり右シフト)した値を代入 (a >>= ba = a >> bと同じ)
>>>= 論理右シフト(符号なし右シフト)した値を代入 (a >>>= ba = a >>> bと同じ)
&= ビット論理積(AND)の値を代入 (a &= ba = a & bと同じ)
|= ビット論理和(OR)の値を代入 (a |= ba = a | bと同じ)
^= ビット排他的論理和(XOR)の値を代入 (a ^= ba = a ^ bと同じ)

三項演算子

三項演算子とは、被演算子を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;
}

順次演算子

式1 , 式2

カンマで区切られた複数の式を左から順に実行します。

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になります。