質問 :
char x = 'a';
x += 3; // ok
x = x + 3; // compile time error
x += 3
は と同等であるため、x = (char)(x+3)
デフォルトでx + 3
は がint
動作するため、int を char に代入してキャストする必要があります。
からJLS specification : 15.26.2
、
E1 op= E2 の形式の複合代入式は、E1 = (T)((E1) op (E2)) と同等です。ここで、T は E1 の型ですが、E1 は 1 回だけ評価されます。型 T への暗黙のキャストは、恒等変換 (?.1.1) または縮小プリミティブ変換 (?.1.3) のいずれかであることに注意してください。