[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座一学期単位2 →4時間目

4時間目 代入演算子及び
インクリメント・デクリメント演算子

2−4−1.代入演算子

 代入演算子は、すでに「=」を使っていますが、それ以外にも代入演算子の種類があります。
プログラムを書く中で、自分自身に何か処理をしてから自分に代入するという事がよくあります。
例えば、次ぎように、
sum = sum + data;
と合計を求める時に、dataをsumに足してsumに代入する事で合計を求める式です。
このsumを書く部分というのは同じ名前ですから2回書くのは面倒ですね。
そこでJavaでは、次のような書き方ができます。

sum += data;

こうする事により、sumはdataを足しsumに代入するのと同じになります。
代入演算子は、2項算術演算子も使う事ができます。
代入演算子の優先順位は、「=」と同じで低い為(詳細は後述)代入される直前に演算されると覚えておきまし ょう。
例えは、「+」でしたが「*,/」等の優先順位が違う演算子も入る為、これを覚えておかないと考えてた通りに 動かなくて困る事になります。

 Sample2_4_1は、代入演算子の例と優先順位の例です。

Sample2_4_1.java
public class Sample2_4_1 {
    public static void main(String[] args) {
        new AssignmentOperato().view();
    }
}

class AssignmentOperator {
    void view() {
        // 代入演算子の例
        int     hoge = 0;
        hoge += 10;
        System.out.println("hoge = " + hoge);
        
        // 代入演算子を使わずに、計算する
        int     piyo = 10;
        piyo = piyo * 10 + 20;
        System.out.println("piyo = " + piyo);
        
        // piyoの計算を代入演算子を使い、計算する
        int     data = 10;
        data *= 10 + 20;
        System.out.println("data = " + data);
    }
}
hoge = 10
piyo = 120
data = 300

 代入演算子の種類を表にまとめました。
まだ説明してないのがありますが、入門講座という事で詳細を省きます。

代入演算子の種類
記号 名前
+= 加算代入
-= 乗算代入
*= 除算代入
/= 剰余代入
%= 論理積代入
|= 論理和代入
^= 排他的論理和代入
<<= 左シフト代入
>= 右シフト代入
>>>= 符号なし右シフト代入

※「hoge ■= piyo;」は、「hoge = hoge ■ piyo;」と同じ意味である。

2−4−2.インクリメント・デクリメント

 Javaには、インクリメント演算子及びデクリメント演算子があります。
インクリメント演算子及びデクリメント演算子は、数値を記憶できる変数に使う事ができます。
書き方は、「++」及び「--」です(呼び方は、前者がプラプラ又はプラスプラス、後者がマイナスマイナス)。

hoge++;
++hoge;

 2つを実行した場合、どちらともhogeに1が足されます。
デクリメント演算子の場合は、1減ります。
ちなみに、前者は後置インクリメント、後者は前置インクリメントと呼びます(デクリメント演算子も同じ)。

 上記の2つを変数に代入すると変数の前に付けるか、後に付けるかで意味が変わってきます。
このような場合です。

piyo = hoge--;
piyo = --hoge;

 前者の場合は、piyoにhogeが代入された後、hogeの値が1減ります。
後者の場合は、hogeの値が1減った後、piyoにhogeが代入されます。

 分解して見ると次のように変わります。
●piyo = hoge++の場合
piyo = hoge;
hoge += 1;

●piyo = ++hogeの場合
hoge += 1;
piyo = hoge;

 インクリメント演算子及びデクリメント演算子を使う場合に代入するときは、前に付けるかそれとも後ろに 付けるかで動作が変わるので注意しましょう。
代入しない場合は値に1足されるか1減るかなのでどちらを使っても変わりありません。
習慣として前置インクリメント・前置デクリメントが使われているようです。
 インクリメント及びデクリメントをまとめたのがSample2_4_2です。

Sample2_4_2.java
public class Sample2_4_2 {
    public static void main(String[] args) {
        new InDecrement().view();
    }
}

class InDecrement {
    void view() {
        int     inDec = 10;
        
        // 変数に代入しないでインクリメント
        inDec++;
        System.out.println("インクリメント1回目 = " + inDec);
        ++inDec;
        System.out.println("インクリメント2回目 = " + inDec);
        
        // 変数に代入しないでデクリメント
        inDec--;
        --inDec;
        System.out.println("デクリメント2回後 = " + inDec);
        
        int     piyo;
        
        // 後置インクリメントで代入してみる
        piyo = inDec++;
        System.out.println("後置インクリメントで代入");
        System.out.println("piyo = " + piyo);
        System.out.println("inDec = " + inDec);
        
        // 前置インクリメントで代入なら
        piyo = ++inDec;
        System.out.println("前置インクリメントで代入");
        System.out.println("piyo = " + piyo);
        System.out.println("inDec = " + inDec);
        
        // 出力時にデクリメントしてみる
        System.out.println("出力時に");
        System.out.println("++inDec = " + ++inDec);
        System.out.println("inDec++ = " + inDec++);
    }
}
インクリメント1回目 = 11
インクリメント2回目 = 12
デクリメント2回後 = 10
後置インクリメントで代入
piyo = 10
inDec = 11
前置インクリメントで代入
piyo = 12
inDec = 12
出力時に
++inDec = 13
inDec++ = 13


3時間目 型と式・演算子に戻る     5時間目 式・演算子のまとめに進む

単位2 ソースの基本に戻る

トップページに戻る