演算子(Operator)

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
instanceofinstanceof演算子(インスタンスの比較で使用する)
左辺のインスタンスと右辺のインスタンスが同じクラスもしくはサブクラスのインスタンスの場合に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

コメント

タイトルとURLをコピーしました