演算子の優先順位
各種演算子には、数学で言う()のような優先順位があります。この優先順位を理解していないと、想定した通りの処理が行われないので注意が必要です。
演算子の優先順位 目次
1.演算子の優先順位
演算子は、カテゴリに分けると①単項演算子、②四則演算などの計算用、③関係演算子、④論理演算子、⑤代入演算子、と5つに分けることができます。ちなみに①は単項演算子(オペランドが1つ)であり、それ以外の②~⑤は2項演算子(n項演算子とも言う)になります。
演算子の優先順位(同時に記述した際にどちらが先に実行されるか)は、この①~⑤の順になります。
優先順位 | 演算子 | 例 |
---|---|---|
高い | 単項演算子 | !hensu、1++、など |
↑ | 計算用演算子 | 1 + 2、hensu * 3、など |
関係演算子 | hensu >= 20 など | |
↓ | 論理演算子 | A && B など |
低い | 代入演算子 | hensu = 10 など |
2.演算子の優先順位一覧
先ほどの演算子を、一つ一つ列挙して一覧にすると次の様になります。
カテゴリ | 種類 | 演算子 |
---|---|---|
単項演算子 | 後置インクリメント・デクリメント | ++ – |
前置インクリメント・デクリメント | ++ – | |
単項プラス・マイナス | + - | |
論理否定 | ! | |
キャスト(型変換) | (型) | |
計算用演算子 | 乗算、除算、剰余算 | * / % |
加算、減算 | + - | |
文字列連結 | + | |
関係演算子 | 値の大小の比較 | < > <= >= |
等号、不等号 | == != | |
論理演算子 | 非短絡の&& | & |
排他的論理和 | ^ | |
非短絡の|| | | | |
論理積 | && | |
論理和 | || | |
代入演算子 | 代入演算子 | = |
3.非短絡の&&とは
上の表で、非短絡の&&(&)と言うのが出てきましたが、これはどういうことかと言うと、通常&&(論理積)は、条件A&&条件Bなどのように記述します。条件Aがtrueであり、かつ条件Bもtrueの時だけ、A&&Bの結果もtrueになります。
と言うことは、もし条件Aがfalseならば、条件Bを評価するまでもなく、A&&Bはfalseであることが分かっています。&&ならば、こういう時に条件Bの評価をしませんが、&ならば必ず条件Bも評価されてしまいます。
両方ともtrueの時しか結果はtrueにならない、それじゃぁ条件Aがfalseだったら条件Bは評価する必要無いよね?というのが(&&)短絡的であるとした場合に、いやいや、ちゃんと全部評価しないといけないでしょ、と言うのが(&)非短絡であるという表現になります。
お分かりかと思いますが、非短絡である&は無駄なので普通は使う必要がありません。また、非短絡の|も同じことになります。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1 = -1; int intHensu2 = -1; // 短絡的な評価(&&)の場合、++intHensu2は評価(実行)されない System.out.println( ++intHensu1 > 0 && ++intHensu2 > 0); System.out.println( intHensu1); System.out.println( intHensu2); } } ---------------------------------------------------------------------- false 0 -1
非短絡な場合は、評価をする必要が無いと分かっていても、評価を行います。
package pac01; public class HelloWorld { public static void main(String[] args) { int intHensu1 = -1; int intHensu2 = -1; // 非短絡的な評価(&)の場合、++intHensu2も評価(実行)される System.out.println( ++intHensu1 > 0 & ++intHensu2 > 0); System.out.println( intHensu1); System.out.println( intHensu2); } } ---------------------------------------------------------------------- false 0 0
最近のコメント