Java基礎 演算子について

f:id:monozukuri-bu:20190708215355j:plain

初めまして、みちです。 Javaの単行演算子について勉強していきたいと思います。

演算子の優先度

演算子には、結合法則と優先度があります。
結合法則とは、同じ優先度が存在した場合、左から計算するか(左結合)、または右から計算するか(右結合)を表しています。
そして優先度とは、1行の式の中に複数の演算子があった場合に、どの演算子から計算をしていくのかという順番のことです。
優先度は、以下の表で上から優先度が高く、下に行くほど低くなります。

種類 演算子 結合法則
単項演算子 ++ -- + - ~ ! (キャスト) 右結合
算術演算子 * / % 左結合
+ - 左結合
シフト演算子 << >> >>>    左結合
ビット演算子 & 左結合
^ 左結合
| 左結合
論理演算子  && 左結合
  || 左結合
3項演算子  ? 右結合
代入演算子  = *= /= %= += -= <<= >>= >>>= &= ^= |= 右結合

単項演算子

単項演算子とは、一つの変数に対して使われている演算子のことです。
インクリメント(1を加算)、デクリメント(1を減算)があり、変数の前後の配置によって動きが変わってきます。

・変数の後ろに置いた場合(後置)

int i = 1;
int j = i++;

後置の場合は、iの変数をjに先に代入してからiに1を加算します。結果としては以下の表の通りです。

iの初期値 実行後のiの値 実行後のjの値
1 j = i++; 2 1

・変数の前に置いた場合(前置)

int i = 1;
int j = ++j;

前置の場合は、iの変数に1を加算してからjの変数に加算します。結果としては以下の表の通りです。

iの初期値 実行後のiの値 実行後のjの値
1 j = ++i; 2 2

問題

自分があまり理解していない時に悩んでいた問題を出したいと思います。

class Test {
    public static void main(String[] args) {
        int x = 10;
        int y = x++;
        int z = ++x;
        System.out.println("x = " + x);
        System.out.println("y = " + y);
        System.out.println("z = " + z);
    }
}




答え

x = 12
y = 10
z = 12

yは、xの値を代入します。そのあとにxに1を加算します。
zは、xに1加算してから代入します。
前置と後置の動きの違いを理解したらわかると思います。

代入演算子と複合代入演算子

代入演算子とは、右辺の値を、左辺の変数に代入するときに使う演算子です。
複合代入演算子は、「+」や「-」などの演算子を代入演算子と組み合わせた演算子です。

演算子 記述例 算術演算子の記述
= a = b -
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b

class Test{
    public static void main(String[] args) {
        int a = 10; int b = 2;
        System.out.println(a += b); //a = 10 + 2;
        System.out.println(a -= b); //a = 12 - 2;
        System.out.println(a *= b); //a = 10 * 2;
        System.out.println(a /= b); //a = 20 / 2;
        System.out.println(a %= b); //a = 10 % 2;
    }
}

結果

12
10
20
10
0

関係演算子

関係演算子は、2つの値を比較して、その結果をtrueかfalseで返します。
trueの場合は、2つの値が一致していることを表しています。
falseの場合は、2つの値が不一致であることを表しています。

演算子 記述例 説明
== a == b aとbの値が等しければtrue、異なればfalse
!= a != b aとbの値が異なればtrue、等しければfalse
> a > b aの値がbの値よりも大きければtrue、以下であればfalse
>= a >= b aの値がb以上であればtrue、小さければfalse
< a < b aの値がbより小さければtrue、以上であればfalse
<= a <= b aの値がb以下であればtrue、大きければfalse

class Test {
    public static void main(String[] args) {
        int a = 1; int b = 2; int c = 1;
        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);
    }
}

結果

false
true
true
false
true
true
false
true

まとめ

今回は演算子について勉強しました。