Java入門|代入演算子の種類

代入の書き方がわかると、Javaの計算処理はもっと短く、もっと読みやすくなる。

Javaでプログラムを書いていると、計算した結果を変数に入れる場面が何度も出てきます。たとえば、合計を求めて保存したり、今ある値に新しい値を足して更新したり、回数や点数を変化させたりするときです。こうした処理の中心になるのが、代入演算子です。

これまで何度も使ってきた = も、もちろん代入演算子のひとつです。ただし、Javaにおける = は、数学の「等しい」という意味ではありません。Javaでは、右辺の値を左辺の変数に代入するという役割を持っています。この考え方は、Javaの基礎の中でもとても大切です。

さらにJavaには、= だけでなく、+= や -= のように、演算と代入をひとまとめにした便利な書き方も用意されています。これらを使うと、同じ処理をより短く、より自然に書けるようになります。特に、合計を少しずつ増やしていく処理や、値を更新しながら進める処理では、とてもよく使われます。

ここでは、代入演算子の基本から始めて、複合的な代入演算子の意味、書き換え方、実際のサンプルプログラムまで、順番にやさしく見ていきましょう。

代入演算子とは

代入演算子とは、変数に値を入れるための演算子です。もっとも基本になるのは、次の = です。

a = 10;

これは、変数 a に 10 を代入する、という意味です。

ここで大切なのは、= を数学の等号のように読まないことです。Javaでは、左辺と右辺が等しいかどうかを表しているのではなく、右辺の値を左辺へ入れるという処理を表しています。

つまり、

a = b;

なら、変数 b の中に入っている値を、変数 a に代入するという意味になります。

この考え方を表にすると、次のようになります。

書き方意味
a = 10;10 を a に代入する
a = b;b の値を a に代入する
a = a + 1;a に 1 を足した結果を、あらためて a に代入する

この最後の書き方は、最初は少し不思議に見えるかもしれません。でも、Javaでは右辺を先に計算して、その結果を左辺に代入するので、問題なく成り立ちます。

複合的な代入演算子とは

Javaには、= だけでなく、演算と代入を組み合わせた便利な代入演算子があります。これらを複合代入演算子と呼びます。

代表的なものを表で見てみましょう。

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

この中で、最初に特によく使うのは +=、-=、*=、/=、%= です。まずはこのあたりをしっかり理解しておくと安心です。

+= 演算子の意味

たとえば、+= 演算子は次のように使います。

a += b;

これは、

  • 変数 a の値に
  • 変数 b の値を足して
  • その結果を a に代入する

という意味です。

つまり、次の書き方と同じです。

a = 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;

この対応を理解すると、複合代入演算子の意味がぐっとわかりやすくなります。

複合代入演算子のよさ

複合代入演算子のよさは、何といってもコードを短く、読みやすくできることです。

たとえば、合計を少しずつ増やしていく処理を考えてみましょう。

通常の書き方なら、次のようになります。

sum = sum + 5;
sum = sum + 3;
sum = sum + 2;

これを複合代入演算子で書くと、

sum += 5;
sum += 3;
sum += 2;

となります。

意味は同じですが、こちらのほうがすっきりしていますね。左辺の変数名を何度も書かなくてよいので、コードが見やすくなります。

空白の入れ方に注意する

複合代入演算子を使うときには、記号の途中に空白を入れてはいけません。

たとえば、次のような書き方は誤りです。

a + = b;

これは += というひとつの演算子ではなく、+ と = が別々に見えてしまうため、正しく書けていません。

正しくは、必ず続けて書きます。

a += b;

ここは細かいようですが、文法として大切なポイントです。複合代入演算子は、記号全体でひとつの演算子として扱う、と覚えておきましょう。

この図では、a += b が、a = a + b と同じ意味であることを示しています。まず a の現在の値と b の値を使って足し算し、その結果をもう一度 a に入れる、という流れです。

この図を見ると、複合代入演算子は単に短く書いているだけではなく、同じ変数を更新するための便利な書き方であることがよくわかります。

サンプルプログラムで確認しよう

では、実際に複合代入演算子を使ったプログラムを見てみましょう。

3回入力した点数を順番に合計していくプログラム例です。

ファイル名:Sample6.java

import java.io.*;

class Sample6
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("3回分の点数を入力してください。");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();
        String str2 = br.readLine();
        String str3 = br.readLine();

        int total = 0;

        // 入力した点数を順番に合計へ加える
        total += Integer.parseInt(str1);
        total += Integer.parseInt(str2);
        total += Integer.parseInt(str3);

        System.out.println("3回分の合計点は " + total + " 点です。");
    }
}

実行結果を見てみよう

たとえば、次のように入力したとします。

3回分の点数を入力してください。
10
20
15
3回分の合計点は 45 点です。

このプログラムでは、最初に total を 0 にしておき、そこへ入力された3つの数値を順番に加えています。

流れを追うと、こうなります。

処理total の値
最初の状態0
1つ目を加える10
2つ目を加える30
3つ目を加える45

このように、+= を使うことで、合計を少しずつ増やしていく処理がとても自然に書けています。

通常の代入で書くとどうなるか

このサンプルの += を、通常の = と + を使って書き換えると、次のようになります。

total = total + Integer.parseInt(str1);
total = total + Integer.parseInt(str2);
total = total + Integer.parseInt(str3);

これでもまったく同じ処理になります。つまり、

total += Integer.parseInt(str1);

は、

total = total + Integer.parseInt(str1);

と同じ意味です。

この対応がわかると、+= の意味がかなりはっきりしてきますね。

複合代入演算子はどんな場面で役立つのか

複合代入演算子は、実際のプログラムでもとてもよく使われます。特に、次のような場面で便利です。

場面
合計を増やすtotal += price;
在庫を減らすstock -= 1;
倍にするvalue *= 2;
割って調整するamount /= 4;
あまりを使うnum %= 5;

たとえば、商品の合計金額を足していく処理では += が自然ですし、残り回数を減らしていくなら -= がよく使われます。

つまり、複合代入演算子は、変数の値を更新し続ける場面で特に活躍します。

よく使う複合代入演算子を例で確認しよう

ここで、よく使うものを具体例つきで整理しておきます。

書き方意味
a += 3;a に 3 を足して代入するa = a + 3;
a -= 2;a から 2 を引いて代入するa = a - 2;
a *= 4;a に 4 を掛けて代入するa = a * 4;
a /= 5;a を 5 で割って代入するa = a / 5;
a %= 2;a を 2 で割ったあまりを代入するa = a % 2;

たとえば、a が 10 のとき、

  • a += 3; なら 13
  • a -= 2; なら 8
  • a *= 4; なら 40
  • a /= 5; なら 2
  • a %= 3; なら 1

になります。

代入演算子を理解するうえで大切なこと

代入演算子を学ぶときは、次のポイントを意識すると理解しやすくなります。

ポイント内容
= は等号ではない右辺の値を左辺に代入する
複合代入演算子は省略形a += b は a = a + b と同じ
同じ変数を更新するときに便利合計や残り数の管理でよく使う
記号の途中に空白を入れない+= は続けて書く必要がある

特に、= を数学の等号と混同しないことはとても大切です。Javaでは、まず右辺を計算し、その結果を左辺の変数に入れます。この考え方がしっかりしていれば、複合代入演算子も自然に理解できます。

複合代入演算子はコードをすっきりさせる

複合代入演算子は、最初は「短く書くための記法」くらいに見えるかもしれません。でも実際には、コードの意図をわかりやすくする効果もあります。

たとえば、

total += score;

と書かれていれば、「total に score を加えて更新するんだな」ということがひと目で伝わります。

一方で、

total = total + score;

でも意味は同じですが、少し長く、同じ変数名が繰り返されます。もちろんこちらも正しい書き方ですが、複合代入演算子を使うことで、よりすっきりした表現になります。

Javaのコードは、ただ動けばよいだけではなく、読みやすさも大切です。複合代入演算子は、その読みやすさにも役立つ便利な記法だといえます。