Javaの演算子には以下7種類があります。
算術演算子(Arithmetic Operators)
算術演算子は、数値演算を行うための演算子です。
演算子 | 名称 | 意味 | 例 |
---|---|---|---|
+ | 足す | 値を加算する。(a+b) | 2+3 → 5 |
– | 引く | 値を減算する。(a-b) | 2-3 → -1 |
* | 掛ける | 値を掛ける。(a×b) | 2*3 → 6 |
/ | 割る | 値を割る。(a÷b) | 1/2 → 0.5 |
% | 余り | 値を割った余りを求める。(…) | 3%2 → 1 |
^ | べき乗 | 排他的論理和を求める | 5^6 → 3 ※ 5⇒101、6⇒110 101と110の排他的論理和は011 ⇒3 |
++ | インクリメント | 値に1を加算する。(a+1) | 2++ → 3 |
– – | デクリメント | 値に1を減算する。(a-1) | 2- – → 1 |
代入演算子(Assignment Operators)
代入演算子は、変数への値の代入を行う演算子です。
「=」以外は代入と計算を同時に行います。
演算子 | 名称 | 意味 | 例 |
---|---|---|---|
= | 代入 | 値を代入する | i=2 |
+= | 加算代入 | a+=b は a=a+b と同じ意味 | 2+=3 → 5 |
-= | 減算代入 | a-=b は a=a-b と同じ意味 | 2-=3 → -1 |
*= | 乗算代入 | a*=b は a=a*b と同じ意味 | 2*=3 → 6 |
/= | 除算代入 | a/=b は a=a/b と同じ意味 | 1/=2 → 0.5 |
%= | 余り代入 | a%=b は a=a%b と同じ意味 | 3%=2 → 1 |
比較演算子(Comparison Operators)
比較演算子は、2つの値を比較した結果をboolean値で返す演算子です。
演算子 | 名称 | 意味 | 例 |
---|---|---|---|
< | 小なり | 左辺が右辺よりも小さい | 5<5 → false |
<= | 小なりイコール | 左辺が右辺よりも小さいか等しい | 5<=5 → true |
> | 大なり | 左辺が右辺よりも大きい | 5>5 → false |
>= | 大なりイコール | 左辺が右辺よりも大きいか等しい | 5>=5 → true |
== | 等しい | 左辺と右辺が等しい | 5==5 → true |
!= | 等しくない | 左辺と右辺が異なる | 5!=5 → false |
instanceof | instanceof演算子 | (インスタンスの比較で使用する) 左辺のインスタンスと右辺のインスタンスが同じクラスもしくはサブクラスのインスタンスの場合にtrueを返す | 下記参照 |
- (instanceofサンプル)
-
ArrayList a = new ArrayList(); ArrayList b = new ArrayList(); List c = new List(); Date d = new Date(); a instanceof b //同じクラスのインスタンス → true a instanceof c //サブクラスクラスのインスタンス → true a instanceof d //違うクラスのインスタンス → false
3項演算子(Ternary Operator)
3項演算子は条件式の評価結果に応じて結果を返す表記法です。
IF文の簡略形と考えると分かりやすいです。
演算子 | 名称 | 意味 |
---|---|---|
?、: | 3項演算 | 1項目がtrueなら2項目を、falseなら3項目を返す |
- (3項演算サンプル)
-
boolean b = false; String str = b?"真です。":"偽です。" str → 偽です。
論理演算子(Logical Operators)
論理演算子は、1つ以上の条件を評価した結果をboolean値で返す演算子です。
演算子 | 名称 | 意味 | 例 |
---|---|---|---|
& | 論理積(AND) | 左辺と右辺が両方ともtrueの場合にtrueを返す (左辺がfalseの場合でも右辺を評価する) | a&b |
&& | 論理積(AND) | 左辺と右辺が両方ともtrueの場合にtrueを返す (左辺がfalseの場合は右辺は評価しない) | a&&b |
| | 論理和(OR) | 左辺と右辺のどちらかがtrueの場合にtrueを返す (左辺がtrueの場合でも右辺を評価する) | a|b |
|| | 論理和(OR) | 左辺と右辺のどちらかがtrueの場合にtrueを返す (左辺がtrueの場合は右辺は評価しない) | a||b |
! | 否定(NOT) | trueの場合はfalse、falseの場合はtrueを返す | !a |
^ | 排他的論理和 (XOR) | 左辺と右辺が異なる場合にtrueを返す | a^b |
※「&と&&」、「|と||」は特別な理由が無い限り「&&、||」の使用が推奨されます。
- (&ではなく、&&を使わないと不具合を起こすサンプル)
-
//val(String型)がnullでも空でもないという判定を行う場合… (val != null & val.equals("")) → &を使ってしまうと、nullだった場合にNullPointerExceptionが発生してしまいます。 (val != null && val.equals("")) → &&を使えば、nullだった場合は右辺は評価しないため問題ありません。
ビット演算子(Bitwise Operators)
ビット演算子は、ビット単位での処理を行うための演算子です。
演算子 | 名称 | 意味 |
---|---|---|
& | ビット論理積(AND) | ビットの両方が1であれば1を返す |
| | ビット論理和(OR) | ビットのどちらかが1であれば1を返す |
^ | ビット排他的論理和(XOR) | ビットが異なれば1を返す |
~ | ビット否定(NOT) | ビットの反転を行う |
- (ビット演算子サンプル)
-
int num1 = 0b110101; //53 int num2 = 0b101001; //41 // ビット論理積(AND) int result = num1 & num2; → 100001 //33 // ビット論理和(OR) int result = num1 | num2; → 111101 //61 // ビット排他的論理和(XOR) int result = num1 ^ num2; → 11100 //28 // ビット否定(NOT) int result = ~num1; → 11111111111111111111111100101010 //-54
シフト演算子(Shift Operators)
シフト演算子は、ビット単位でシフト処理を行うための演算子です。
演算子 | 名称 | 意味 |
---|---|---|
<< | 左シフト | ビットを左にシフトする操作 右側にゼロが埋められ左側のビットは切捨てられる |
>> | 右シフト (符号あり) | ビットを右にシフトする操作 左側のビットに符号ビット(正数:ゼロ 負数:1)を埋めることにより数値の値を変更せずにシフトする |
>>> | 右シフト (符号なし) | 符号ありと異なり常にゼロで埋められる。結果、符号の影響を受けずにビットのシフトが行える |
- (シフト演算子サンプル)
-
// 左シフト int num = 5; //00000101 int shifted = num << 2; → 00010100 //20 // 右シフト(符号あり) int num = -10; //11110110 int shifted = num >> 2; → 11111101 //-3 // 右シフト(符号なし) int num = -10; //11111111111111111111111111110110 int shifted = num >>> 2; → 00111111111111111111111111111101 //1073741821
コメント