Java - 演算子の優先順位

演算子の優先順位

通常の四則演算にも優先順位があるように、Java の演算子にも優先順位があります。以下の例では、通常の計算と同じように足し算よりも掛け算の方が優先されます。

int num;
num = 10 + 5 * 4; // 30
演算子の優先順位

演算がどの順番で行われるのかは、演算子の優先順位と結合規則によって決まります。優先順位はどの演算が先に行われるのかを決定し、結合規則は優先順位が同じ演算子だった場合にどの演算が先に行われるのかを決定します。演算子の優先順位と結合規則は、以下のとおりです。優先順位が高い順に記述しています。同じ行に書かれている演算子の優先順位に違いはありません。

左結合  (引数)  [配列添字]  .  ++  -- (後置演算子)
右結合  !  ~  +  - (単項演算子)  ++  -- (前置演算子)
右結合  new  (型)
左結合  *  /  %
左結合  +  - (算術演算子)
左結合  <<  >>  >>>
左結合  >  >=  <  <=  instanceof
左結合  ==  !=
左結合  &
左結合  ^
左結合  |
左結合  &&
左結合  ||
右結合  ?:
右結合  =  +=  -=  *=  /=  %=  <<=  >>=  >>>=  &=  |=  ^=
演算子の優先順位

以下の例では、+ よりも * の演算子の優先順位が高いため、まず 5 * 4 が計算されます。その次に 10 + 20 が計算され、最後に = によって num30 が代入されます。

int num;
num = 10 + 5 * 4; // 30
演算子の優先順位

優先順位が同じ演算子の場合は、演算子の結合規則に従います 例えば、+- の優先順位は同じです。そのため、上記の一覧の左に書かれている結合規則に従って計算されます。演算子が左結合の場合には左から順に、右結合の場合には右から順に演算が行われます。

以下の例では、左結合の演算子のため、まず 10 + 5 の演算が先に行われ、その次に 15 - 4 の演算が行われます。そして最後に = によって num11 が代入されます。

int num;
num = 10 + 5 - 4; // 11
演算子の優先順位

括弧を使った優先順位の変更

通常の計算と同じように、計算式を括弧で囲んだ場合、その中の計算式がすべての演算子よりも優先されます。以下の例では、10 + 5 を優先的に計算しているため、num には 60 が代入されます。

int num;
num = (10 + 5) * 4; // 60
括弧を使った優先順位の変更

ただし、括弧の中に複数の演算子が含まれている場合は、括弧の中だけで演算子の優先順位や結合規則を使って演算される順番が決まります。

int num;
num = (10 + 8 / 2) * 4; // 56
括弧を使った優先順位の変更

また、括弧の中にさらに括弧を記述することもできます。

int num;
num = ((10 + 8) / 2) * 4; // 36
括弧を使った優先順位の変更

関連記事