Javaを勉強していると演算子というものに出くわし戸惑った経験はありませんか?
数学などで勉強してきたモノと少し異なり中々慣れないといった経験が自分にもありました。
そのような方に向けて今回は演算子について初心者でも数学が苦手な方でもわかるように解説していきます。
本記事では演算子を下記の順で解説していきます。
- 算術演算子
- 代入演算子
- 論理演算子
- 関係演算子
- インクリメント/デクリメント演算子
- ビット演算子
- 演算子の優先順位
算術演算子
まず一つ目に解説するのは算術演算子で下記のようなものです。
演算子 | 説明 |
---|---|
+ | 足し算をしてくれる |
– | 引き算をしてくれる |
* | 掛け算をしてくれる |
/ | 割り算をしてくれる |
% | 割り算をした際のあまりを求めてくれる |
この演算子は計算問題などでよく使用されます。
使用方法とその結果は下記の通りとなります。
【使用例】
public class Main {
public static void main(String[] args){
int a=1+2;
int b=5-3;
int c=4*5;
int d=9/3;
int e=11%2;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
【実行結果】
3
2
20
3
1
因みに割り算を実施するとき仮に「int d=11/2;」とした場合、実行結果は「5」となります。
理由として11も2もint型のため小数点を表現することができないためです。
この場合下記記事でも解説しましたdouble型などを使用することで小数点を表現することが可能です。
Javaのプリミティブ型(データ型)解説【初学者・初心者用】 | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
使用方法としては下記のように型変換という技術を使用することでint型の11や2をdouble型に変換することができます。
double d=(double)11/2;
上記を実行すると「5.5」という実行結果を得ることができます。
代入演算子
次に解説するのは代入演算子で下記のようなものがあります。
演算子 | 説明 |
---|---|
= | 「=」の左側の変数に右側の値を代入することができる |
+= | 「=」の左側の変数に右側の値を足してから、左側の変数に代入する 例えば「d+=3」は「d=d+3」と同様となる |
-= | 「=」の左側の変数から右側の値を引いてから、左側の変数に代入する 例えば「d-=3」は「d=d-3」と同様となる |
*= | 「=」の左側の変数に右側の値を掛けてから、左側の変数に代入する 例えば「d*=3」は「d=d*3」と同様となる |
/= | 「=」の左側の変数を右側の値で割ってから、左側の変数に代入する 例えば「d/=3」は「d=d/3」と同様となる |
%= | 「=」の左側の変数を右側の値で割ったあまりを、左側の変数に代入する 例えば「d%=3」は「d=d%3」と同様となる |
この演算子も算術演算子同様計算を実施する際によく使用されます。
使用方法と実行結果は下記のようになります。
【使用例】
public class Main {
public static void main(String[] args){
int a=12;
a+=5;
System.out.println(a);
a-=2;
System.out.println(a);
a*=3;
System.out.println(a);
a/=5;
System.out.println(a);
a%=4;
System.out.println(a);
}
}
【実行結果】
17
15
45
9
1
論理演算子
3つ目に開設するのは論理演算子で下記のような種類があります。
演算子 | 説明 |
---|---|
& | 「a & b」とした場合、aとb両方trueなら解答もtrueとなる 片方がfalseとなれば解答はfalseとなる |
&& | 「a && b」とした場合、aとb両方trueなら解答もtrueとなる 片方がfalseとなれば解答はfalseとなる |
| | 「a | b」とした場合、aまたはbのどちらかがtrueなら解答もtrueとなる |
|| | 「a || b」とした場合、aまたはbのどちらかがtrueなら解答もtrueとなる |
! | 「!c」とした場合、cがtrueなら解答はfalse、cはfalseなら解答はtrueとなる |
^ | 「a ^ b」とした場合、abのどちらかがtrueなら解答はtrueとなる どちらもtrue、falseの場合は回答はfalseとなる |
この演算子は条件の判定でよく使用されtrue/falseで判断されます。
上記表で&と&&、|と||の違いは演算子を挟んだ左側の結果次第で右側の評価を実施するか、しないか違いです。
言葉で話しても少し難しいので、例を用いて解説します。
「a & b」と「c && d」があったとします。
この場合条件の判定方法として下記のような違いがあります。
a & b | aがfalseかつbがfalseの時に解答がfalseと判定される |
a && b | aがfalseの時に解答がfalseと判定される |
「a && b」ですとaがfalseとなった段階でbがtrueだろうがfalseだろうが解答は必ずfalseとなるためbの判定を見る必要がないのです。
そして「a | b」や「c || d」の場合も同様で、「c || d」はcがtrueとなった時点でdの判定結果は見ずに解答はtrueと判断されます。
使用例と実行結果は下記の通りとなります。
【使用例】
public class Main {
public static void main(String[] args){
boolean a=true;
boolean b=true;
boolean c=false;
System.out.println(a&b);
System.out.println(a&c);
System.out.println(a&&b);
System.out.println(a&&c);
System.out.println(a|b);
System.out.println(a|c);
System.out.println(a||b);
System.out.println(a||c);
System.out.println(!a);
System.out.println(!c);
System.out.println(a ^ b);
System.out.println(a ^ c);
}
}
【実行結果】
true
false
true
false
true
true
true
true
false
true
false
true
関係演算子
4つ目にご紹介するのは関係演算子で、下記のようなものがあります。
演算子 | 説明 |
---|---|
== | 「a == b」だと、aとbが等しければ結果がtrueとして返される |
!= | 「a != b」だと、aとbが等しくなければ結果がtrueとして返される |
> | 「a > b」だと、aがbよりも大きければ結果がtrueとして返される |
>= | 「a >= b」だと、aがb以上であれば結果がtrueとして返される |
< | 「a < b」だと、aがbよりも小さければ結果がtrueとして返される |
<= | 「a <= b」だと、aがb以下であれば結果がtrueとして返される |
instanceof | 「a instanceof b」だと、aがbクラスのインスタンスである場合は結果としてtrueが返される aがbインタフェースを実装したクラスのインスタンスである場合は結果としてtrueが返される |
instanceofの説明で記載されているインスタンスについては下記記事で詳しく解説していますので、ぜひ一度読んでみてください。
【Java】インスタンスとは何なのか? | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
使用例は下記の通りとなります。
【使用例】
public class Main {
public static void main(String[] args){
Object a=5;
System.out.println(4==4);
System.out.println(5!=3);
System.out.println(10>4);
System.out.println(12>=12);
System.out.println(7<23);
System.out.println(15<=22);
System.out.println(a instanceof Integer);
}
}
実行結果はすべてtrueとなるため割愛します。
インクリメント/デクリメント演算子
5つ目はインクリメント/デクリメント演算子というもので、下記2つです。
演算子 | 説明 |
---|---|
++ | 「a++」「++a」とすることで「a+1」と同様の結果を得ることができる |
— | 「a–」「–a」とすることで「a-1」と同様の結果を得ることができる |
ここで「a++」「++a」の違いと、「a–」「–a」の違いですが、下記の使用例と実行結果を見ていただいたらすぐにわかると思います。
【使用例】
public class Main {
public static void main(String[] args){
int a=0;
System.out.println(++a);
System.out.println(a++);
System.out.println(a);
System.out.println(--a);
System.out.println(a--);
System.out.println(a);
}
}
【実行結果】
1
1
2
1
1
0
まず「++a」を実施すると「a=a+1」が実施されるので結果は1となります。
そして次に「a++」を実施するとaが結果として表示されてから「a=a+1」が実施されます。
そのため結果は「1」と表示され、次の出力で2と表示されています。
マイナスの時も同様に先に引き算をしてから出力するか、出力してから引き算をするかの違いがあります。
ビット演算子
6つ目に解説するのはビット演算子で下記のような種類があります。
演算子 | 説明 |
---|---|
& | 「a & b」だと、数値を2進数で表した際にabともに1と表示されているビットのみが セットされて解答として出力される |
| | 「a | b」だと、数値を2進数で表した際にabのどちらかに1と表示されているビットが セットされて解答として出力される |
<< | 「a << b」だと、数値を2進数で表した際にaをbビット左にシフトする 右端は0で埋める |
>> | 「a >> b」だと、数値を2進数で表した際にaをbビット右にシフトする 左端はその時の最上位ビットと同様の符号を埋める |
~ | 「~a」だと、数値を2進数で表した際にaのビットをすべて反転させる |
>>> | 「a >>> b」だと、数値を2進数で表した際にaをbビット右にシフトする 左端は0で埋める |
使用方法と実行結果は下記のようになります。
【使用例】
public class Main {
public static void main(String[] args){
int a=0;
System.out.println(5 & 6);
System.out.println(5 | 6);
System.out.println(2 << 4);
System.out.println(-7 >> 2);
System.out.println(~8);
System.out.println(7 >>> 2);
}
}
【実行結果】
4
7
32
-2
-9
1
演算子の優先順位
では最後に演算子の優先順位について解説していきます。
演算子には優先順位が存在します。
数学でも+よりも×を先に実施するというものがあったと思いますが、それと同じです。
今回紹介した演算子の優先順位としては下記の通りとなります。
優先度 | 演算子 |
---|---|
1 | a++、a– |
2 | ++a、–a、!、~ |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | =、+=、-=、*=、/=、%=、 |
結構細かく区分されてはいますが、初めからすべてを覚える必要はありません。
自分もコードを組んでいくうちに何となくこっちが優先度が高い、低いが分かるようになっていきますので、Javaを書いていきつつ覚えていくのがいいでしょう。
因みに優先度は括弧をつけることで変更することもできます。
数学でも括弧内の計算は×、÷よりも優先されるというのがあったと思いますが、それと同様です。
まとめ
本記事ではJavaの演算子に関して下記手順で解説してきました。
- 算術演算子
- 代入演算子
- 論理演算子
- 関係演算子
- インクリメント/デクリメント演算子
- ビット演算子
- 演算子の優先順位
色々な演算子があり混乱される方も多いと思いますが、使っていくことで段々と覚えていくことができます。
今回ですべてを覚えようとせずに少しずつ覚えていくのがいいと思います。
以上で今回の解説は終了となります。
コメント