【Java】複合代入演算子(+= など)の落とし穴をやさしく解説|初心者がつまずくポイントまとめ

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

+=*= といった複合代入演算子は、
「書き方が短くなる便利なやつ」というイメージが強いですが、
実は 暗黙の型変換が絡むため、落とし穴が多い ところでもあります。

特に Java Bronze の試験でもよく問われるポイントで、
実務でも「なんでこの値になるの?」と混乱しがちな部分です。

この記事では、やさしく・実務寄りに
複合代入演算子の仕組みと注意点を整理していきます。


まずはコードを確認

Java
byte a = 10;
a = (byte) (a + 5); // 通常の加算(キャストが必要)
a += 5;             // 複合代入(キャスト不要)

int x = 10;
x += 1.5;           // OK(暗黙の型変換)
System.out.println(x); // 11(小数点以下が切り捨てられる)

String s = "Hello";
s += 123;           // 文字列結合になる

コードのしくみを解説

複合代入演算子は「暗黙のキャスト」をしてくれる

通常の a = a + 5 は、計算結果が int になるため
byte に戻すにはキャストが必要です。

Java
byte a = 10;
a = (byte) (a + 5); // キャスト必須

しかし a += 5 は OK。

Java
a += 5; // 暗黙のキャストが入る

Java が内部で
「計算 → 元の型に戻す」
という処理を自動でやってくれます。

ただし「値が壊れる」可能性は普通にある

Java
byte a = 120;
a += 10; // オーバーフローして値が壊れる

複合代入はキャストを省略できるだけで、
安全になるわけではありません。

実務でも「+= したら値が変になった」という相談はよくあります。

+= は「型を変える」ことがある

Java
int x = 10;
x += 1.5;

1.5double ですが、
x += 1.5double → int の暗黙キャスト が入ります。

結果:

x = 11(小数点以下が切り捨て)

通常の書き方だとエラーになります。

Java
x = x + 1.5; // コンパイルエラー

複合代入だけ特別扱いされるため、
「なんでこれ通るの?」と混乱しがちです。

String の += は「文字列結合」になる

Java
String s = "Hello";
s += 123;

これは

s = s + 123;

と同じ意味で、
文字列結合として扱われます。

実務ではログ出力やデバッグでよく使われる書き方です。


あわせて知っておきたいポイント

計算式の型は「大きい型に寄せられる」

Java
byte a = 1;
byte b = 2;
byte c = (byte) (a + b); // a + b は int

複合代入だけが特別扱いされる理由はここにあります。

+= は「キャストを省略できる」だけで安全ではない

Java
short s = 30000;
s += 10000; // 値が壊れる

キャストが省略されるだけで、
オーバーフローは普通に起きます。

実務では「意図しない型変換」がバグの原因になる

特に以下のケースは要注意:

  • int に double を += して小数が消える
  • byte / short のオーバーフロー
  • String の += が大量にあるとパフォーマンス低下(StringBuilder 推奨)

使うときに気をつけたいこと

  • 複合代入は暗黙のキャストが入ることを理解しておく
  • キャストが省略されるだけで安全ではない
  • byte / short の += は特に危険
  • int += double は小数が消える
  • String の += は便利だが多用すると遅い

実務では「+= は便利だけどクセがある」と覚えておくと安心です。


まとめ

複合代入演算子(+= など)

  • 暗黙のキャストが入る
  • 通常の a = a + b と挙動が違う
  • オーバーフローは普通に起きる
  • String の += は文字列結合になる

注意すべきポイント

  • byte / short の計算は int になる
  • int += double は小数が切り捨てられる
  • パフォーマンス面では StringBuilder を検討

decopon
decopon

複合代入演算子は、短く書ける便利な記法ですが、 「暗黙のキャストが入る」という特徴を知っておくと 一気に理解が深まります。
Java Bronze の試験でも、実務でも、 ここを押さえておくと“型の罠”に強くなれます。
あなたの学びが、次のステップにつながりますように。

moco
moco

短く書けるけど、ちょっとクセがあるんだって。
+= の裏側で何が起きてるか、知ってると安心だよ。

コメント

タイトルとURLをコピーしました