演算子の優先順位
前回は、演算子の種類と式の評価について説明しましたが、オペランドが分解された後に、評価が実行されるには演算子に優先順位が存在します。今回はその演算子の優先順位について説明します。
演算子の優先順位 目次
1.演算子の優先順位
前回提示した基本的な演算子それぞれに優先順位を付けるとこのようになります。
演算子の種類 | 説明 | 優先順位(1が一番高い) |
---|---|---|
+ | 加算演算子 | 2 |
– | 減算演算子 | 2 |
* | 乗算演算子 | 1 |
/ | 除算演算子 | 1 |
% | 剰余算(余りを求める) | 1 |
= | 代入演算子 | 3 |
乗算と除算、剰余算が一番優先順位が高く、次いで加算減算、代入演算子は一番優先順位が低いです。例えば次の様な場合は乗算(*)が先に計算されます。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1; // 結果は7になる intHensu1 = 1 + 2 * 3; System.out.println(intHensu1); } } -------------------------------------------------------------------- 7
この辺りは、数学の内容と同じ考えですので普通に考えて貰えば大丈夫です。代入演算子が一番優先順位が低いのは、各種計算をした結果を最後に変数に代入するからと考えれば納得がいくかと思います。
2.優先順位の指定
それでは、優先順位を指定(変える)したい場合はどうすれば良いかと言うと、これも数学と同じ考えでカッコ()を付ければOKです。例えば先の例で加算を先に行いたい場合は次の様に記述します。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1; // 結果は7になる //intHensu1 = 1 + 2 * 3; // 加算を先に実行 ⇒ 答えは9 intHensu1 = (1 + 2) * 3; System.out.println(intHensu1); } } -------------------------------------------------------------------- 9
想定したとおり、加算が先に行われています。
3.同じ優先順位同士の優先順位
3-1 加減乗除の場合
加算と減算や、乗算と除算は、同じ優先順位です。ではこれらが同時に実行される場合はどうなるのかと言うと、演算子毎に決まりがあります。加減乗除の場合は左から順番に計算されます。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1; // 左から順番に計算するので、答えは0 intHensu1 = 1 + 2 - 3; System.out.println(intHensu1); } } -------------------------------------------------------------------- 0
乗算と除算の場合も同様に、左から順番に計算されます。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1; // 左から順番に計算するので、答えは6 intHensu1 = 3 * 4 / 2; System.out.println(intHensu1); } } -------------------------------------------------------------------- 6
3-2 代入演算子の場合
代入演算子の場合は、加減乗除とは逆で右から順番に実行されます。そもそも1つの式に代入演算子を2つ以上書くことはあまりないと思いますが、一応覚えておきましょう。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1; int intHensu2; // intHensu1 = 1; intHensu2 = 2; intHensu1 = intHensu2 = 3; System.out.println(intHensu1); System.out.println(intHensu2); } } -------------------------------------------------------------------- 3 3
同じ優先順位の演算子が並んだ際の「実行される方向」も踏まえて、演算子一覧の表を更新します。
演算子の種類 | 説明 | 優先順位(1が一番高い) | 同じ優先順位の場合の方向 |
---|---|---|---|
+ | 加算演算子 | 2 | 左から |
– | 減算演算子 | 2 | |
* | 乗算演算子 | 1 | |
/ | 除算演算子 | 1 | |
% | 剰余算(余りを求める) | 1 | |
= | 代入演算子 | 3 | 右から |
最近のコメント