1. ホーム
  2. java

[解決済み] Javaで「+=」演算子は何をするのですか?

2022-03-01 11:03:20

質問

以下のコードの意味を理解するのを手伝ってくれませんか?

x += 0.1;

解決方法は?

プログラミングの常識は、以下の通りです。 x += y の等価な省略記法である。 x = x + y . というのは xy が同じ型である場合(例えば、両方とも int のように)、この2つの文は同等とみなしてよい。

しかし、Javaでは x += y と同じです。 x = x + y を一般的に使用します。

もし xy が異なる型である場合、言語の規則により、2つの文の動作は異なります。例えば、次のようにします。 x == 0 (int)と y == 1.1 (double)となります。

    int x = 0;
    x += 1.1;    // just fine; hidden cast, x == 1 after assignment
    x = x + 1.1; // won't compile! 'cannot convert from double to int'

+= は暗黙のうちにキャストを実行します。 + の場合、第2オペランドを明示的にキャストする必要があり、そうしないとコンパイラーエラーが発生します。

Joshua Blochの Java パズラー :

(...) 複合代入式は、その結果を自動的にキャストします。 計算を実行し、その変数の型に変換します。 左手側 もし結果の型が の場合、キャストは何の影響も及ぼしません。しかし,変数の型が が変数より広い場合、複合 代入演算子は、サイレント・ナローイング・プリミティブを実行します。 変換 JLS 5.1.3 ].