演算子

  • 演算子とは:計算や比較の際に用いる記号のこと
  • 演算子には優先順位がある。下の表では、上にいくにつれて優先度が上がっていく。
  • また、優先順位が同じ演算子の場合、左から右へ計算するかその逆かがある(結合規則)。
種類 演算子 結合規則
単行演算子 ++, --, +, -(数値の±意味), ~, !, (キャスト) 右から
算術演算子 *, /, % 左から
+, -
シフト演算子 <<, >>, >>> 左から
比較演算子 <, >, <=, >=, instanceof 左から
==, !=
ビット演算子 & 左から
^
|
論理演算子 && 左から
||
三項演算子 ? : 右から
代入演算子 =, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= 右から

※文字列に対して+演算子を使用すると文字列を結合することができる
※「数字+文字列」でもエラーにならない。数字は文字列として扱われ、文字列結合されたものになる。(boolean型も同じ、文字列として結合される)

算術演算子

数値を計算する際に用いる。
文字列の連結にも用いることもできる。

Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y = 2;

        System.out.println(x + y); //足し算
        System.out.println(x - y); //引き算
        System.out.println(x * y); //掛け算
        System.out.println(x / y); //割り算
        System.out.println(x % y); //剰余(割り算のあまり)
	System.out.println(-(x + y)); //符号の反転
    }
}
//出力結果:
//12
//8
//20
//5
//0
//-12

以下では、「整数 / 小数」の計算結果は、小数になっていることがわかる。

Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y = 2;
        double z = 2.0;

        System.out.println(x / y);
        System.out.println(x / z);
        System.out.println(x % y);
    }
}
//出力結果:
//5
//5.0
//0

以下では、+演算子を使って文字列の連携を行なっている。
全てString型に吸収されていることがわかる。

Training.java
class Training {
    public static void main(String[] args){
        String text = "Text";
        int num1 = 2;
        double num2 = 2.0;
        boolean t = true;
        String n = null;

        System.out.println(text + num1);
        System.out.println(num1 + text);
	System.out.println((num1 + 5) + text);
        System.out.println(num2 + text);
        System.out.println(t + text);
        System.out.println(n + text);
    }
}
//出力結果:
//Text2
//2Text
//7Text
//2.0Text
//trueText
//nullText

関係演算子

真偽を判断する際に用いる。
そのため、関係演算子を用いた際、必ずboolean型のtrue, またはfalseが返ってくる。
※if文などの条件分岐でよく用いられる。

Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y = 2;
        int z = 10;
        
        System.out.println(x > y); //xはyより大きいか
        System.out.println(x < y); //xはyより小さいか
	System.out.println(x >= z); //xはz以上か
        System.out.println(x == z); //xとzは等しいか
	System.out.println(x != z); //xとzは異なるか(not イコール)

    }
}
//出力結果:
//true
//false
//true
//true
//false

※=は必ず右側にくる

論理演算子

複数の条件を比べる際に用いる演算子。

論理演算子 説明
& すべての条件がtureにならない限りfalseを返す。比較時にfalseとなった場合もそれ以降の値を評価する。
| 条件のうちどれか一つでもtrueであればtrueを返す。比較時にtrueとなった場合もそれ以降の値を評価する。
&& すべての条件がtureにならない限りfalseを返す。比較時にfalseとなった場合、それ以降の値は評価されない。
|| 条件のうちどれか一つでもtrueであればtrueを返す。比較時にtrueとなった場合、それ以降の値は評価されない。
^ 比較対象の値が異なる時、true。そうでなければfalse。つまり、not。

真偽値を反転させる際に用いる演算子。

論理演算子 説明
! !aで説明する。aがtrueの時falseにする。つまり、booleanの反転。これは、複数の値を比較するものではない。
Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y = 2;
        
        System.out.println(x > 2 && x > 15); //xは2より大きい、かつ15より大きい
        System.out.println(y >= 10 || y == 2); //yは10以上、または2と等しい
    }
}
//出力結果:
//false
//ture

以下では、&&&の違いを表している。
&&の場合は、false(num3++ > 10)となった段階で、それ以降を評価していないことがわかる。
そのため、++num4が実行されない。

Training.java
class Training {
    public static void main(String[] args){
        int num1 = 10, num2 = 10, num3 = 10, num4 = 10;

        boolean result = num1++ > 10 & ++num2 > 10;
        System.out.println(result+":"+num1+":"+num2);

        boolean result2 = num3++ > 10 && ++num4 > 10;
        System.out.println(result2+":"+num3+":"+num4);
    }
}
//出力結果:
//false:11:11
//false:11:10

複合代入演算子

これまで変数にデータを代入する際に使用していた=は、代入演算子と呼ばれる。
複合代入演算子は、代入演算子に算術演算子を組み合わせた演算子のこと。

Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y = 2;
        
        System.out.println(x += 10);
        System.out.println(y *= 5);
    }
}
//出力結果:
//20
//10

※=は必ず右側にくる

インクリメント・デクリメント

インクリメント・デクリメント演算子を後ろ、または前に持ってくるのかで挙動が変わってくる。
これらは主に、for文で用いられることがほとんど。(for文では後置、前置どっちでもいい)

後置インクリメント・デクリメント

インクリメント・デクリメントが書かれた文(1行)の処理が終わった後に、+1、または-1を行う。
代入される側の値に注意。

  • インクリメント(後置):変数++
  • デクリメント(後置):変数--
Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y;

        y = x++; //yにxの値を代入した後に、xに1足す(文の処理後に+1)
        
        System.out.println(x);
        System.out.println(x++); //xを出力した後に、xに1足す(文の処理後に+1)
        System.out.println(y);
        System.out.println(x);
    }
}
//出力結果:
//11
//11
//10
//12

前置インクリメント・デクリメント

先に、+1、または-1を行い、値を取得する。
代入を伴う際、値が変わる心配が不要。

  • インクリメント(前置):++変数
  • デクリメント(前置):--変数
Training.java
class Training {
    public static void main(String[] args){
        int x = 10;
        int y;

        y = ++x; //処理の先にxに1足す
	
        System.out.println(x);
        System.out.println(++x); //処理の先にxに1足す
        System.out.println(y);
        System.out.println(x);
    }
}
//出力結果:
//11
//12
//11
//12