
Java道|代入演算子と複合代入のしくみ
値を入れるだけじゃない。
代入演算子を使いこなすと、Javaの計算はもっと短く、もっと読みやすくなる。
Javaでプログラムを書いていると、計算した結果を変数に入れる場面が何度も出てきます。たとえば、合計点を保存する、残り回数を減らす、今の値に新しい値を足して更新する、といった処理です。
このような処理の中心になるのが、代入演算子です。
Javaでは = を使って、右側の値を左側の変数に入れます。ここで大切なのは、Javaの = は数学の「等しい」という意味ではないことです。Javaでは、右辺を計算して、その結果を左辺の変数に代入するという意味になります。
さらにJavaには、+= や -= のように、計算と代入をまとめて書ける複合代入演算子があります。この記事では、指定内容に沿って Sample6.java のみを使い、代入演算子と複合代入のしくみを、鬼滅の刃風の世界観にたとえながら整理します。
鬼滅の刃風にたとえると、変数は「剣士が持っている力の器」、代入は「その器に新しい力を入れること」です。複合代入は、「今ある力に追加の修行成果を加えて、同じ器に戻す動き」と考えるとイメージしやすいです。
代入演算子とは
代入演算子とは、変数に値を入れるための演算子です。
もっとも基本になるのが = です。
a = 10;これは、a に 10 を代入するという意味です。
数学では = を「左と右が等しい」という意味で使いますが、Javaでは少し違います。Javaでは、右辺の値を左辺の変数に入れるという処理を表します。
たとえば、次のように書いた場合です。
a = b;これは、b の値を a に代入するという意味です。
a と b が同じかどうかを調べているわけではありません。
| 書き方 | 意味 |
|---|---|
| a = 10; | 10 を a に代入する |
| a = b; | b の値を a に代入する |
| a = a + 1; | a に 1 を足した結果を、もう一度 a に代入する |
特に、次の形は最初に見ると少し不思議に感じるかもしれません。
a = a + 1;数学の感覚だと、a と a + 1 が等しいように見えてしまいます。
しかしJavaでは、右辺を先に計算します。
つまり、a の現在の値に 1 を足して、その結果をもう一度 a に入れるという意味です。
古い値をもとに新しい値を作り、その新しい値で更新します。
= は「等しい」ではなく「入れる」
代入演算子を理解するときに一番大切なのは、= の読み方です。
Javaでは、次のように読むと分かりやすいです。
| Javaの式 | 読み方 |
|---|---|
| power = 10; | power に 10 を入れる |
| total = score; | total に score の値を入れる |
| total = total + score; | total に score を足した結果を、total に入れ直す |
たとえば、次のコードを考えます。
int power = 10;
power = power + 5;最初に power には 10 が入っています。
次に、power + 5 が計算されます。
この時点では、
10 + 5なので、結果は 15 です。
そして、その 15 が power に代入されます。
その結果、power の値は 15 に更新されます。
| 処理 | power の値 |
|---|---|
| int power = 10; | 10 |
| power = power + 5; | 15 |
このように、代入は「今の値を使って新しい値を作り、同じ変数に入れ直す」ことがあります。
複合代入演算子とは
Javaには、= だけでなく、演算と代入をまとめた書き方があります。
これを複合代入演算子といいます。
代表的なものは次のとおりです。
| 記号 | 名前 | 意味 |
|---|---|---|
| += | 加算代入 | 足して代入する |
| -= | 減算代入 | 引いて代入する |
| *= | 乗算代入 | 掛けて代入する |
| /= | 除算代入 | 割って代入する |
| %= | 剰余代入 | あまりを代入する |
| &= | 論理積代入 | ビット演算などで使う |
| |= | 論理和代入 | ビット演算などで使う |
| ^= | 排他的論理和代入 | ビット演算などで使う |
| <<= | 左シフト代入 | ビットを左にずらして代入する |
| >>= | 右シフト代入 | ビットを右にずらして代入する |
| >>>= | 符号なし右シフト代入 | 符号を考慮せず右にずらして代入する |
最初の段階で特によく使うのは、次の5つです。
| 記号 | よく使う場面 |
|---|---|
| += | 合計を増やす |
| -= | 残り数を減らす |
| *= | 値を倍にする |
| /= | 値を割って調整する |
| %= | あまりを求めて更新する |
まずは、+=、-=、*=、/=、%= をしっかり押さえると安心です。
+= 演算子の意味
+= は、今の値に何かを足して、その結果を同じ変数に代入する演算子です。
a += b;これは、次の書き方と同じ意味です。
a = a + b;つまり、a += b は、a に b を足して、その結果を a に入れ直すという意味です。
| 複合代入 | 通常の書き方 | 意味 |
|---|---|---|
| a += b; | a = a + b; | a に b を足して代入する |
| a -= b; | a = a - b; | a から b を引いて代入する |
| a *= b; | a = a * b; | a に b を掛けて代入する |
| a /= b; | a = a / b; | a を b で割って代入する |
| a %= b; | a = a % b; | a を b で割ったあまりを代入する |
鬼滅の刃風にたとえると、+= は「今の鍛錬値に、追加の修行成果を足して、鍛錬値を更新する」ような動きです。
たとえば、trainingPower が 10 のとき、
trainingPower += 5;と書くと、trainingPower は 15 になります。
これは次と同じ意味です。
trainingPower = trainingPower + 5;図:+= は a = a + b と同じ意味
↓クリックすると拡大表示されます。

この図が示していること
この図では、a += b が a = a + b と同じ意味であることを示しています。
a の現在値が 10、b の値が 5 の場合、まず 10 + 5 を計算します。
その結果は 15 です。
そして、その 15 をもう一度 a に代入します。
ここから分かることは、+= は単に短く書いているだけではなく、同じ変数を更新するための便利な書き方だということです。
複合代入演算子のよさ
複合代入演算子のよさは、コードを短く、読みやすくできることです。
たとえば、合計を少しずつ増やす処理を考えます。
通常の代入で書くと、次のようになります。
total = total + 5;
total = total + 3;
total = total + 2;これを複合代入演算子で書くと、次のようになります。
total += 5;
total += 3;
total += 2;どちらも意味は同じです。
しかし、+= を使ったほうがすっきりしています。
| 通常の書き方 | 複合代入の書き方 |
|---|---|
| total = total + 5; | total += 5; |
| total = total + 3; | total += 3; |
| total = total + 2; | total += 2; |
複合代入演算子を使うと、同じ変数名を何度も書かずに済みます。
そのため、「この変数を更新している」という意図が読み取りやすくなります。
鬼滅の刃風にたとえると、毎回「今の鍛錬値に追加修行を足して、鍛錬値として記録し直す」と長く説明する代わりに、「鍛錬値に追加する」と短く言えるようなものです。
空白の入れ方に注意する
複合代入演算子を使うときは、記号の途中に空白を入れてはいけません。
次の書き方は誤りです。
a + = b;これは、+= という1つの演算子として扱われません。
+ と = が分かれてしまっているため、正しい複合代入演算子になりません。
正しくは、次のように続けて書きます。
a += b;| 書き方 | 正しいか | 理由 |
|---|---|---|
| a += b; | 正しい | += が1つの演算子になっている |
| a + = b; | 誤り | + と = が分かれてしまっている |
複合代入演算子は、記号全体で1つの演算子です。
そのため、+=、-=、*=、/=、%= は途中で分けずに書きます。
複合代入を確認する
ここでは、3回分の修行点を入力し、その合計を求めるプログラムを見ていきます。
入力された点数を total に順番に加えていくところで、+= を使います。
ファイル名: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 にしています。
int total = 0;そのあと、入力された3つの値を順番に total へ加えています。
total += Integer.parseInt(str1);
total += Integer.parseInt(str2);
total += Integer.parseInt(str3);Integer.parseInt は、入力された文字列を整数に変換するために使っています。
br.readLine で受け取った入力は文字列なので、計算に使うには整数へ変換する必要があります。
たとえば、10、20、15 と入力した場合、total の値は次のように変化します。
| 処理 | total の値 |
|---|---|
| 最初の状態 | 0 |
| 1つ目の修行点 10 を加える | 10 |
| 2つ目の修行点 20 を加える | 30 |
| 3つ目の修行点 15 を加える | 45 |
このように、+= を使うことで、合計を少しずつ増やしていく処理が自然に書けます。
図:Sample6.javaのtotalが更新される流れ
↓クリックすると拡大表示されます。

この図が示していること
この図では、Sample6.java の中で total がどのように更新されるかを示しています。
最初、total は 0 です。
そこへ 10 を加えると 10 になります。
次に 20 を加えると 30 になります。
最後に 15 を加えると 45 になります。
ここから分かることは、+= が「現在の値に新しい値を足して、同じ変数に戻す」処理だということです。
通常の代入で書くとどうなるか
Sample6.java の += を、通常の代入で書くと次のようになります。
total = total + Integer.parseInt(str1);
total = total + Integer.parseInt(str2);
total = total + Integer.parseInt(str3);これは、次の複合代入と同じ意味です。
total += Integer.parseInt(str1);
total += Integer.parseInt(str2);
total += Integer.parseInt(str3);比較すると、対応関係がよく分かります。
| 複合代入 | 通常の代入 |
|---|---|
| total += Integer.parseInt(str1); | total = total + Integer.parseInt(str1); |
| total += Integer.parseInt(str2); | total = total + Integer.parseInt(str2); |
| total += Integer.parseInt(str3); | total = total + Integer.parseInt(str3); |
どちらも同じ処理ですが、+= のほうが短く書けます。
また、total を更新していることがひと目で分かりやすくなります。
よく使う複合代入演算子を具体例で整理する
ここで、よく使う複合代入演算子を具体例で確認します。
| 書き方 | 通常の書き方 | 意味 |
|---|---|---|
| a += 3; | a = a + 3; | a に 3 を足して代入する |
| a -= 2; | a = a - 2; | a から 2 を引いて代入する |
| a *= 4; | a = a * 4; | a に 4 を掛けて代入する |
| a /= 5; | a = a / 5; | a を 5 で割って代入する |
| a %= 3; | a = a % 3; | a を 3 で割ったあまりを代入する |
たとえば、a の値が 10 の場合を考えます。
| 処理 | 結果 |
|---|---|
| a += 3; | 13 |
| a -= 2; | 8 |
| a *= 4; | 40 |
| a /= 5; | 2 |
| a %= 3; | 1 |
それぞれの処理は、次のように考えます。
a += 3;これは、a に 3 を足して、a に戻します。
a -= 2;これは、a から 2 を引いて、a に戻します。
a *= 4;これは、a に 4 を掛けて、a に戻します。
a /= 5;これは、a を 5 で割って、a に戻します。
a %= 3;これは、a を 3 で割ったあまりを、a に戻します。
複合代入演算子が役立つ場面
複合代入演算子は、変数の値を更新し続ける処理でよく使います。
| 場面 | 例 | 意味 |
|---|---|---|
| 合計を増やす | total += price; | total に price を加える |
| 残り数を減らす | stock -= 1; | stock を 1 減らす |
| 値を倍にする | power *= 2; | power を 2 倍にする |
| 値を分ける | amount /= 4; | amount を 4 で割る |
| あまりを保存する | number %= 5; | number を 5 で割ったあまりにする |
鬼滅の刃風にたとえると、次のようになります。
| Javaの処理 | 鬼滅の刃風のイメージ |
|---|---|
| total += score; | 修行点を合計に加える |
| stock -= 1; | 持っている護符を1枚使う |
| power *= 2; | 呼吸の集中で力を2倍にする |
| stamina /= 2; | 体力を半分に調整する |
| count %= 3; | 3組に分けたときの余りを確認する |
このように、複合代入演算子は「現在の値を変化させて更新する」場面でとても便利です。
代入演算子を理解するうえで大切なこと
代入演算子を学ぶときは、次のポイントを意識すると理解しやすくなります。
| ポイント | 内容 |
|---|---|
| = は等号ではない | 右辺の値を左辺に代入する |
| 右辺を先に計算する | 計算結果を左辺の変数に入れる |
| += は省略形 | a += b は a = a + b と同じ |
| 同じ変数の更新に便利 | 合計や残り数の管理でよく使う |
| 記号の途中に空白を入れない | += は1つの演算子として続けて書く |
特に大切なのは、Javaでは右辺が先に計算されるという点です。
total = total + score;この式では、まず total + score を計算します。
その結果を total に代入します。
この考え方が分かると、
total += score;の意味も自然に理解できます。
複合代入演算子はコードの意図を分かりやすくする
複合代入演算子は、単に短く書くためだけの記法ではありません。
コードの意図を分かりやすくする効果もあります。
たとえば、次のコードを見てみます。
total += score;このコードを見ると、total に score を加えて更新していることがすぐに分かります。
一方で、次のようにも書けます。
total = total + score;こちらも正しい書き方です。
ただし、total が2回出てくるため、少し長く見えます。
| 書き方 | 印象 |
|---|---|
| total = total + score; | 処理の流れが丁寧に見える |
| total += score; | 更新している意図が短く伝わる |
Javaのコードは、動くだけでなく、あとから読んで分かりやすいことも大切です。
複合代入演算子を使うと、変数を更新していることが簡潔に伝わります。
初心者がつまずきやすいところ
代入演算子と複合代入演算子では、次の点でつまずきやすいです。
| つまずきやすい点 | 考え方 |
|---|---|
| = を等号だと思ってしまう | Javaでは右辺を左辺に入れる |
| a = a + 1 が不思議に見える | 右辺を先に計算して、a に戻す |
| += が特別な計算に見える | a += b は a = a + b の短い書き方 |
| a + = b と書いてしまう | += は途中で分けずに書く |
| いつ使えばよいか迷う | 同じ変数を更新するときに使う |
特に、次の2つを区別できるようになると理解が進みます。
a = b;これは、b の値を a に入れる処理です。
a += b;これは、a に b を足して、a に入れ直す処理です。
似ていますが、a += b では、もともとの a の値も計算に使われます。
Sample6.javaの処理を一歩ずつ読む
Sample6.java では、まず次のように入力の準備をしています。
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));これは、キーボードから入力を受け取るための準備です。
次に、3回分の入力を受け取っています。
String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();ここで受け取った str1、str2、str3 は文字列です。
そのため、数値として足し算するには、Integer.parseInt で整数に変換します。
total += Integer.parseInt(str1);この1行では、次の処理をしています。
| 処理 | 内容 |
|---|---|
| Integer.parseInt(str1) | str1 を整数に変換する |
| total += 変換した値 | total にその値を足して更新する |
たとえば str1 が 10 なら、次と同じ意味になります。
total = total + 10;このように、入力された値を順番に total に加えていくことで、合計点を作っています。
学習で意識したい読み方
複合代入演算子を見たときは、頭の中で次のように読み替えると分かりやすいです。
| 見たコード | 頭の中での読み替え |
|---|---|
| total += score; | total = total + score; |
| stock -= 1; | stock = stock - 1; |
| power *= 2; | power = power * 2; |
| amount /= 4; | amount = amount / 4; |
| number %= 5; | number = number % 5; |
最初のうちは、複合代入演算子を見たら、通常の書き方に戻して考えるのがおすすめです。
total += score;を見たら、
total = total + score;と読み替えます。
慣れてくると、total += score を見ただけで、「total に score を足して更新する」と自然に読めるようになります。
Javaらしい読みやすい書き方へ
代入演算子と複合代入演算子は、Javaの基本ですが、とても重要です。
特に、合計を求める処理や、値を少しずつ更新する処理では、複合代入演算子を使うとコードがすっきりします。
total += Integer.parseInt(str1);
total += Integer.parseInt(str2);
total += Integer.parseInt(str3);このように書くと、total に値を順番に加えていることが分かりやすくなります。
鬼滅の刃風にたとえると、total は剣士の総合修行点です。
1回目、2回目、3回目の修行成果を順番に加えていき、最後に総合修行点として表示します。
複合代入演算子は、こうした「今ある値を育てていく処理」と相性がよい書き方です。
= の意味、右辺を先に計算する流れ、そして += が a = a + b の短い書き方であることを押さえておくと、Javaの計算処理がぐっと読みやすくなります。
